1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-06-15 07:29:29 +00:00
C02/include/apple2.a02
2020-04-27 12:20:37 -04:00

85 lines
2.5 KiB
Plaintext

;Apple 1 program initialization code for c02 programs
SUBROUTINE _APPLE2
;System Specific ASCII Key Mappings
DELKEY EQU $08 ;Delete/Backspace Key (Left Arrow)
ESCKEY EQU $1B ;Escape/Stop Key (Escape)
RTNKEY EQU $0D ;Return/Enter Key (Return)
;Zero Page Variables (*=System Variable)
DSTLO EQU $06 ;Destination Pointer
DSTHI EQU $07
BLKLO EQU $08 ;Block Segment Pointer (block.a02)
BLKHI EQU $09
STKLO EQU $1D ;Stack Pointer (stack.a02)
STKHI EQU $1E
RANDOM EQU $1F ;Random Number
INVFLG EQU $32 ;*Inverse Flag: $3F=Blinking, $7F=Inverse, $FF=Normal
SRCLO EQU $71 ;Source Pointer
SRCHI EQU $72
RDSEED EQU $E3 ;Random Seed
BLKSLO EQU $EB ;Block Start Address
BLKSHI EQU $ED
BLKELO EQU $ED ;Block End Address
BLKEHI EQU $EE
BLKLEN EQU $EF ;Block Segment Length
BFRLO EQU $FA ;Work Buffer Pointer
BFRHI EQU $FB
TEMP0 EQU $FC ;Temporary Storage
TEMP1 EQU $FD
TEMP2 EQU $FE
TEMP3 EQU $FF
;I/O Locations
.KBD EQU $C000 ;Keyboard Data
.AKD EQU $C010 ;Keyboard Strobe Register
;Monitor Routines
PRBYTE EQU $FDDA ;Print Accumulator as Hexadecimal Number
PRHEX EQU $FDE3 ;Print Low Nybble of Accumulator as Hex Digit
EXIT EQU $03D0 ;Return to Monitor - Jump Vector to DOS warm start
ORG $0C00 ;Safe Area for Machine Language
START: JSR NEWLIN ;Start On New Line
JMP MAIN ;Execute Program
;Poll Keyboard for Raw Character
POLKEY: INC RDSEED ;Cycle Random Seed
LDA #0 ;Clear Accumulator
BIT .KBD ;Check Keyboard Strobe Bit
BPL POLKER ;If Key Pressed
LDA .KBD ; Load Key Value
STA .AKD ; Clear Strobe
POLKER: RTS
;Get ASCII Character from Keyboard
GETKEY: JSR POLKEY ;Poll Keyboard
AND #$7F ;Strip High Bit
RTS
;Wait for ASCII Character from Keyboard
GETCHR: JSR GETKEY ;Get Modified Key Code
BEQ GETCHR ;Loop if No Key
RTS
;Delete Previous Character
DELCHR: LDX #2 ;Two Characters Total
LDA #$88 ;Load Backspace Character
JSR $F94C ;Monitor Routine PRBLAX
LDA #DELKEY ;Load Backspace Character
;and Fall into PRCHR
;Print Character to Screen
PUTCHR: ORA #$80 ;Set High Bit
CMP #$E0 ;
BCC PRCHRX ;If Lower Case
AND #$1F ; Convert to Inverse
PRCHRX: JMP $FDF0 ;Execute Monitor Routine COUT1
;Advance Character to Next line
NEWLIN EQU $FD8E ;Monitor Routine CROUT
INCLUDE "../include/putstr.a02" ;PUTSTR routine