;Template Program Initialization code for C02 programs ;System Specific ASCII Key Mappings DELKEY EQU $7F ;Delete/Backspace Key ($08=Backspace, $7F=Delete) ESCKEY EQU $1B ;Escape/Stop Key ($03=Ctrl-C, $1B=Escape) RTNKEY EQU $0D ;Return/Enter Key ($0D=Carriage Return) ;Zero Page Locations SRCPTR EQU $00 ;Source Pointer DSTPTR EQU $02 ;Destination Pointer BLKPTR EQU $34 ;Block Segment Pointer STKPTR EQU $06 ;Stack Pointer USRPTR EQU $08 ;User Pointer XMADDR EQU $0A ;Extended Memory Address XMBANK EQU $0C ;Extended Memory Bank STKSAV EQU $0D ;Stack Pointer Storage RDSEED EQU $0E ;Pseudo-RANDOM Seed RANDOM EQU $0F ;Pseudo-RANDOM Number Storage TEMP0 EQU $10 ;Temporary Storage TEMP1 EQU $11 TEMP2 EQU $12 TEMP3 EQU $13 TMPPTR EQU $14 ;Temporary Pointer BLKBGN EQU $16 ;Block Start Address BLKEND EQU $18 ;Block End Address BLKLEN EQU $1A ;Block Segment Length SYSBFP EQU $1B ;Position in System Buffer STKBGN EQU $1C ;Stack Start Address STKEND EQU $1E ;Stack End Address ; $20-$FF ;Free Zero Page for Applications SYSBFL EQU 128 ;System Buffer Size (Max String Size) SYSBFR EQU $0200 ;System Buffer ; $0281-$02FF ;Unused ;Placeholders Labels for the Example Code Below POLKEY EQU $FFFE ;ROM Read Key Routine WSTART EQU $FFFF ;BASIC Warm Start Routine ORG $0300 ;Program Start Address START: NOP ;System specific initialization code TXS ;If an RTS is used to return to the Operating System, STX STKSAV ; the Stack Pointer should be preserved JMP MAIN ;Execute Program ;Exit Program and Return to Operating System or Monitor EXIT: BRK ;Usually BRK if returning to Monitor LDX STKSAV ;If an RTS is used to return to the Operating System, TXS ; the Stack Pointer should be restored to original state RTS ; in case program exits in the middle of a Function JMP WSTART ;Or it may just execute the BASIC Warm Start Routine ;Poll Character from Keyboard PLKEY: INC RDSEED ;Cycle the Random Seed (if not provided by system) NOP ;Code Read from Keyboad RTS ;Read Character from Console GETKEY; ;Usually Drops into RDKEY, but may need to call RDKEY ; then clean/convert returned value (e.g. Apple-1) ;Wait for Character from Console GETCHR: JSR POLKEY ;Usually calls POLKEY BEQ GETCHR ; until a non-zero is returned RTS ;Delete Previous Character DELCHR: RTS ;Code to move Cursor to left and clear that position ;May work differently on systems that don't support this ;Advance Cursor to Next line NEWLIN: RTS ;Code to move Cursor to beginning of next line ;May emit Carriage Return, Line Feed, or both ;Print Character to Screen PUTCHR: RTS ;Code to write ASCII character to Screen INCLUDE "prbyte.a02" ;PRBYTE and PRHEX routines INCLUDE "putstr.a02" ;PUTSTR routine