; c02 Program Initialization Code for Commodore 64 ;PETSCII Key Mappings DELKEY EQU $14 ;Delete/Backspace Key (Delete) ESCKEY EQU $03 ;Escape/Stop Key (RUN/STOP) RTNKEY EQU $0D ;Return/Enter Key (RETURN) ;Zero Page Variables XMBANK EQU $0A ;Extended Memory Bank [Load/Verify Flag] XMADDR EQU $0B ;Extended Memory Address [Array Index/Flags] ; $16 ;[Temporary String Stack Pointer] SRCPTR EQU $17 ;Source Pointer [Temporary String Space Pointer] DSTPTR EQU $19 ;Destination Pointer [Temporary String Stack] ; $21 ;[Temporary String Stack] BLKPTR EQU $22 ;Block Pointer [Temporary Pointers] STKPTR EQU $24 ;Stack Pointer [Temporary Pointers] ; $26-$29 ;[Floating Point Work Area] USRPTR EQU $35 ;[Temporary String Pointer] TEMP0 EQU $61 ;Temporary Variable [Floating Point Accumulator] TEMP1 EQU $63 ;Temporary Variable [Floating Point Accumulator] TEMP2 EQU $65 ;Temporary Variable [Floating Point Accumulator] TEMP3 EQU $67 ;Temporary Variable [Floating Point Accumulator] TMPPTR EQU $69 ;Temporary Pointer [Floating Point Argument] ; $6A-$70 ;[Floating Point Argument] .STKEY EQU $91 ;Stop Key flag RDSEED EQU $A2 ;Random Seed [Software Jiffy Clock (Low Byte)] ; $FB-$FE ;Unused Zero Page for Applications ;System Variables SYSBFL EQU 88 ;System Buffer Size (88 Bytes) SYSBFR EQU $0200 ;System Buffer [Keyboard Buffer] SYSBFP EQU $0313 ;Position in System Buffer [Free Byte] BLKBGN EQU $0334 ;Block Start [Unused Byte] BLKEND EQU $0336 ;Block Start [Unused Byte] BLKLEN EQU $0338 ;Block Length [Unused Byte] RANDOM EQU $0339 ;Random Number Storage [Unused Byte] .STKSAV EQU $033A ;Machine Stack Storage [Unused Byte] ; $033B ;Free Byte for User Programs TBFFR EQU $033C ;Cassette I/O Buffer STKBGN EQU $03FC ;Stack Start [Unused Byte] STKEND EQU $03FE ;Stack End [Unused Byte] ;Video RAM and ROM VICSCN EQU $0400 ;Video Screen Memory Area (Unexpanded) CHRROM EQU $D000 ;Character Generator ROM VICCLR EQU $D800 ;Color RAM (Unexpanded) ;ROM Routines FSFLFA EQU $F314 ;Find Logical File A ;Machine Language Basic Stub ORG $0801 ;Start of Basic Program BASIC: DC $0C, $08 ;Pointer to Next Line DC $00, $00 ;Line Number (0) DC $9E ;SYS DC $20 ;' ' DC $32, $30, $36 ,$32 ;"2062" DC $00 ;End of Line Marker DC $00, $00 ;End of Basic Program START: TSX ;Get Stack Pointer STX .STKSAV ;and Save for Exit JMP MAIN ;Execute Program EXIT: LDA #0 ;Clear Stop Key Flag STA .STKEY LDX .STKSAV ;Retrieve Saved Stack Pointer TXS ;and Restore It RTS ;Poll Keyboard for Character POLKEY EQU $FFE4 ;Aliased to Kernal GETIN Routine ;Get Character from Keyboard GETKEY EQU POLKEY ;Get Key From Keybord ;Wait for Character from Keyboard GETCHR: JSR GETKEY ;Poll Keyboard BEQ GETCHR ;If No Key, Loop RTS ;Print Character to Console ;uses direct call to SCRNOUT instead of CHROUT PUTCHR EQU $E716 ;Aliased to SRCNOUT Routine ;Delete Previous Character DELCHR: LDA #DELKEY ;Load Delete Character JMP PUTCHR ;Print and Return ;Advance Character to Next line NEWLIN: LDX #0 ;Store 0 STX $D3 ;in Cursor Column and JMP $E87C ;Execute NXTLINE Routine ;Print Zero Delimited String to Screen PUTSTR: TXA ;Copy LSB to Accumulator JMP $AB1E ;Execute STROUT INCLUDE "prbyte.a02" ;PRBYTE and PRHEX routine