C02/include/vic.a02

106 lines
3.6 KiB
Plaintext

;c02 Program Initialization Code for Vic-20 - Common Code
;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 Locations
SRCLO EQU $22 ;Source Pointer LSB [Temporary Pointers]
SRCHI EQU $23 ;Source Pointer MSB [Temporary Pointers]
DSTLO EQU $24 ;Destination Pointer LSB [Temporary Pointers]
DSTHI EQU $25 ;Destination Pointer MSB [Temporary Pointers]
BLKLO EQU $26 ;Block Pointer LSB [Floating Point Work Area]
BLKHI EQU $27 ;Block Pointer MSB [Floating Point Work Area]
STKLO EQU $28 ;Stack Pointer LSB [Floating Point Work Area]
STKHI EQU $29 ;Stack Pointer MSB [Floating Point Work Area]
BFRLO EQU $35 ;Buffer Pointer LSB [Temporary String Pointer]
BFRHI EQU $36 ;Buffer Pointer MSB [Temporary String Pointer]
RDSEED EQU $A2 ;Random Seed [Software Jiffy Clock (Low Byte)
TEMP0 EQU $FB ;Temporary Variable [Unused Byte]
TEMP1 EQU $FC ;Temporary Variable [Unused Byte]
TEMP2 EQU $FD ;Temporary Variable [Unused Byte]
TEMP3 EQU $FE ;Temporary Variable [Unused Byte]
;System Variables
USER0 EQU $0310 ;Free Byte for User Programs
USER1 EQU $0311 ;Free Byte for User Programs
USER2 EQU $0312 ;Free Byte for User Programs
USER3 EQU $0313 ;Free Byte for User Programs
BLKSLO EQU $0334 ;Block Start LSB [Unused Byte]
BLKSHI EQU $0335 ;Block Start MSB [Unused Byte]
BLKELO EQU $0336 ;Block Start MSB [Unused Byte]
BLKEHI EQU $0337 ;Block End MSB [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]
USER11 EQU $033B ;Free Byte for User Programs
TBFFR EQU $033C ;Cassette I/O Buffer
STKSLO EQU $03FC ;Stack Start LSB [Unused Byte]
STKSHI EQU $03FD ;Stack Start MSB [Unused Byte]
STKELO EQU $03FE ;Stack End LSB [Unused Byte]
STKEHI EQU $03FF ;Stack End MSB [Unused Byte]
;ROM Routines
FSFLFA EQU $F3D4 ;Find Logical File A
START: TSX ;Get Stack Pointer
STX STKSAV ;and Save for Exit
JMP MAIN ;Execute Program
EXIT: LDX STKSAV ;Retrieve Saved Stack Pointer
TXS ;and Restore It
RTS ;Return to BASIC
;Poll Keyboard for Character
POLKEY EQU $FFE4 ;Aliased to Kernal GETIN Routine
;Get Character from Keyboard
GETKEY EQU POLKEY ;Get Key From Keybord
;Get Character from Keyboard
;GETKEY: JSR POLKEY ;Get Key From Keybord
; ;The below is not working...
; LDY $9005 ;Get Character Memory Offset
; CPY #242 ;If Upper/Lower
; BNE GETKEX
; BIT $FF ; Bit 7 -> C, Bit 6 -> V
; BVC GETKEX ; If Bit 6 Set (Alpha)
; BCC GETKEL ; If Bit 7 Set (PETSCII Upper)
; AND #$7F ; Clear Bit 7 (ASCII Upper)
; BNE GETKEX ; Else
;GETKEL: ORA #$20 ; Set Bit 5 (ASCII Lower)
;GETKEX: ORA #$00 ;Set Flags
; RTS
;A = $41 %0100 0001
;a = $C1 %1100 0001 PETSCII
;a = $61 %0110 0001 PETSCII
;$9005 = 240 UPR/GFX
; 242 UPR/LWR
;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 $E742 ;Aliased to SRCOUT 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 $E8C3 ;Execute NXTLINE Routine
;Print Zero-Terminated String
PUTSTR: TXA ;Copy LSB to Accumulator
JMP $CB1E ;Execute STROUT Routine