commit cf6a6e42598682b829124be83c3bc13bec285cd5
parent f2bad1455f1224db7a69afae9fe6dd11f2338dcf
Author: Luxferre <lux@ferre>
Date: Sun, 31 Jul 2022 18:37:56 +0300
Datetime syscall fixed and compat macro introduced
Diffstat:
4 files changed, 37 insertions(+), 8 deletions(-)
diff --git a/tal-lib/esop-lib-macro.tal b/tal-lib/esop-lib-macro.tal
@@ -3,6 +3,8 @@
|00 @Control [ &framevec $2 &io $2 &random $1 &status $1 &sound $1 &syscall $1 ]
+|c0 @DateTime [ &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &dst $1 ]
+
( control block macros )
%SETSCRVEC { .Control/framevec DEO2 }
@@ -24,6 +26,10 @@
%DBGBYTE { DUP DBG }
( val* -- val* )
%DBGSHORT { DUP2 SWP DBG DBG }
+( addr* -- addr* )
+%DATETIME { DUP2 #46 SYS SWP SYS SYS }
+( load date and time into #00c0 similarly to Varvara or SPARTA specs )
+%DATETIME-COMPAT { #c000 #46 SYS SYS SYS }
( input helper macros )
diff --git a/tal-lib/esop-lib-subs.tal b/tal-lib/esop-lib-subs.tal
@@ -75,6 +75,26 @@
INC2 ,&loop JMP
&eof POP2 JMP2r
+( convert true hex short value to BCD - up to 9999 represented by #270f coded into #9999 )
+
+( convert BCD to hex value )
+
+( output decimal short )
+@print-dec ( x y value* -- x y )
+ STH2 ( value* -- )
+ #00 ,&zero STR
+ #2710 ,&parse JSR
+ #03e8 ,&parse JSR
+ #0064 ,&parse JSR
+ #000a ,&parse JSR
+ ,&emit JSR POP
+ STH2r
+JMP2r
+ &parse DIV2k DUP ,&emit JSR MUL2 SUB2 JMP2r
+ &emit
+ DUP [ LIT &zero $1 ] #0000 EQU2 ,&skip JCN
+ #01 ,&zero STR DUP #30 ADD STH2r ROT ;putc STH2 JSR2 &skip POP JMP2r
+
( nanofont glyphs for ESOP, courtesy of Michaelangel007 )
@nanofont
diff --git a/tal-lib/moveme.tal b/tal-lib/moveme.tal
@@ -4,22 +4,25 @@
|0100
;on-frame SETSCRVEC
- #10 #12
+ #1a #20 ( mv-x mv-y )
BRK
@on-frame
+ DATETIME-COMPAT ( get datetime info into #00c0 )
+ #10 #12 ( year-x year-y -- )
+ .DateTime/year LDZ2 ( year-x year-y year* -- )
+ ;print-dec JSR2 ( mv-x mv-y year-x year-y -- )
+ POP2 ( mv-x mv-y -- )
;moveme ;draw-str JSR2
- NIP #10 SWP ( reset x coordinate )
+ SWP #20 SUB SWP ( restore x coord between frames )
;&adv KP-A JMPKEY
;&back KP-B JMPKEY
BRK
&adv
- #fa DBG
- DEC
+ SWP INC DBGBYTE SWP
BRK
&back
- #fb DBG
- INC
+ SWP DEC DBGBYTE SWP
BRK
@moveme "MOVE 20 "ME! 00
diff --git a/web/esop-ext.js b/web/esop-ext.js
@@ -183,7 +183,7 @@ function ESOPExtensions() {
return (Date.UTC(y, m, d) - Date.UTC(y, 0, 0)) / 86400000
}
- function fillDTbuf(addr) {
+ function fillDTbuf(vm, addr) {
var now = new Date(),
year = now.getFullYear(),
month = now.getMonth() + 1,
@@ -213,7 +213,7 @@ function ESOPExtensions() {
if(call === 0x00) //simulate writing a byte to the debug port
console.log('[DBG] ' + ('00' + buf[1].toString(16)).slice(-2))
else if(call === 0x06) { //read datetime info into 10 bytes starting from addr
- fillDTbuf((buf[1]<<8)|buf[2])
+ fillDTbuf(vm, (buf[1]<<8)|buf[2])
}
else if(call === 0x1f) //halt call, required for all implementations
vm.active = false