74 lines
1.6 KiB
Tal
74 lines
1.6 KiB
Tal
( ESOP stdlib, macro part )
|
|
( by Luxferre, 2022, public domain )
|
|
|
|
|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 }
|
|
%INKEY { .Control/io DEI2 }
|
|
%PXL { .Control/io DEO2 }
|
|
%PXLk { DUP2 PXL }
|
|
%RND { .Control/random DEI }
|
|
%STACKTRACE { #ff .Control/random DEO }
|
|
%DEVSTAT { .Control/status DEI }
|
|
%SND { .Control/sound DEO }
|
|
%SYS { .Control/syscall DEO }
|
|
|
|
( some syscall macros )
|
|
|
|
%HLT { #1f SYS }
|
|
( val -- )
|
|
%DBG { #20 SYS SYS }
|
|
( val -- val )
|
|
%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 )
|
|
|
|
%KP-0 { #0001 }
|
|
%KP-1 { #0002 }
|
|
%KP-2 { #0004 }
|
|
%KP-3 { #0008 }
|
|
%KP-4 { #0010 }
|
|
%KP-5 { #0020 }
|
|
%KP-6 { #0040 }
|
|
%KP-7 { #0080 }
|
|
%KP-8 { #0100 }
|
|
%KP-9 { #0200 }
|
|
%KP-A { #0400 }
|
|
%KP-B { #0800 }
|
|
%KP-C { #1000 }
|
|
%KP-D { #2000 }
|
|
%KP-STAR { #4000 }
|
|
%KP-HASH { #8000 }
|
|
|
|
( jump to label or subroutine if a particular key is pressed )
|
|
( label* keymask* -- )
|
|
%JMPKEY { INKEY AND2 ORA ROT ROT JCN2 }
|
|
%JSRKEY { INKEY AND2 SWP2 JSR2 }
|
|
|
|
( misc macros )
|
|
|
|
( byte to short )
|
|
%BTS { #00 SWP }
|
|
|
|
( decrement )
|
|
%DEC { #01 SUB }
|
|
|
|
( get the bit or the nibble of a specific number )
|
|
( val bitnum -- bit )
|
|
%GETBIT { SFT #01 AND }
|
|
( val* bitnum -- bit )
|
|
%GETBIT2 { SFT2 #0001 AND2 NIP }
|
|
( val* nibnum -- nibble )
|
|
%GETNIBBLE { #20 SFT SFT2 NIP #0f AND }
|
|
|