C02/include/vicasm.a02

61 lines
1.8 KiB
Plaintext

;c02 Program Initialization Code for Vic-20 - Common Code
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 ;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