esop

Essential Stack-Operated Phone (concept)
git clone git://git.luxferre.top/esop.git
Log | Files | Refs | README | LICENSE

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:
Mtal-lib/esop-lib-macro.tal | 6++++++
Mtal-lib/esop-lib-subs.tal | 20++++++++++++++++++++
Mtal-lib/moveme.tal | 15+++++++++------
Mweb/esop-ext.js | 4++--
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