mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-29 16:51:10 +00:00
96 lines
2.4 KiB
Plaintext
96 lines
2.4 KiB
Plaintext
|
; Program initialization code for C02 programs
|
||
|
; Template for System Specific Code
|
||
|
|
||
|
ORG $0400 ;Program Start Address
|
||
|
|
||
|
;System Specific ASCII Key Mappings
|
||
|
DELKEY EQU $08 ;Delete/Backspace Key (Backspace)
|
||
|
ESCKEY EQU $1B ;Escape/Stop Key (Escape)
|
||
|
RTNKEY EQU $0D ;Return/Enter Key (Carriage Return)
|
||
|
NULKEY EQU $00 ;No Key was Pressed (Null)
|
||
|
|
||
|
;Zero Page Locations
|
||
|
SRCPTR EQU $10
|
||
|
DSTPTR EQU $12
|
||
|
BFRLO EQU $14 ;Work Buffer Pointer
|
||
|
BFRHI EQU $15
|
||
|
|
||
|
STKSAV EQU $1D ;Stack Pointer Storage
|
||
|
RDSEED EQU $1E ;Pseudo-RANDOM Seed
|
||
|
RANDOM EQU $1F ;Pseudo-RANDOM Number Storage
|
||
|
|
||
|
TEMP0 EQU $20 ;Temporary Storage
|
||
|
TEMP1 EQU $21
|
||
|
TEMP2 EQU $22
|
||
|
TEMP3 EQU $22
|
||
|
|
||
|
BLKBGN EQU $30 ;Block Start Address
|
||
|
BLKEND EQU $32 ;Block End Address
|
||
|
BLKPTR EQU $34 ;Block Pointer
|
||
|
BLKLEN EQU $36 ;Block Segment Length
|
||
|
|
||
|
STKSLO EQU $48 ;Stack Start Address
|
||
|
STKSHI EQU $49
|
||
|
STKELO EQU $4A ;Stack End Address
|
||
|
STKEHI EQU $4B
|
||
|
STKLO EQU $4C ;Stack Pointer
|
||
|
STKHI EQU $4D
|
||
|
|
||
|
;Memory Mapped I/O
|
||
|
IOBASE EQU $E000
|
||
|
IOINIT EQU IOBASE+0 ;Clear Terminal Window
|
||
|
IOPUTC EQU IOBASE+1 ;Put Character
|
||
|
IOPUTR EQU IOBASE+2 ;Put Raw Character
|
||
|
IOPUTH EQU IOBASE+3 ;Put as Hexadecimal Number
|
||
|
IOGETC EQU IOBASE+4 ;Get Character
|
||
|
IOPOSX EQU IOBASE+5 ;Set Cursor X Position
|
||
|
IOPOSY EQU IOBASE+6 ;Set Cursor Y Position
|
||
|
|
||
|
START: LDX #$FF ;Initialize Stack Pointer
|
||
|
TXS ;
|
||
|
STX IOINIT ;Clear Screen
|
||
|
JMP MAIN ;Execute Program
|
||
|
|
||
|
;Exit Program and Return to Monitor
|
||
|
EXIT: BRK ;Halt Debugger
|
||
|
|
||
|
;Read Character from Console
|
||
|
GETKEY EQU $FFE0 ;Emulator CHRIN Routine
|
||
|
|
||
|
;Poll Character from Keyboard
|
||
|
POLKEY: INC RDSEED ;Cycle the Random Seed
|
||
|
LDA IOGETC ;Code Read from Keyboard
|
||
|
RTS
|
||
|
|
||
|
;Wait for Character from Console
|
||
|
GETCHR: JSR POLKEY ;Usually calls PLKEY
|
||
|
BEQ GETCHR ; until a non-zero is returned
|
||
|
RTS
|
||
|
|
||
|
;Delete Previous Character
|
||
|
DELCHR: LDA #$08 ;Load Backspace into Accumulator
|
||
|
JMP PUTCHR ; and Print it
|
||
|
|
||
|
;Advance Character to Next line
|
||
|
NEWLIN: LDA #$0D ;Load Carriage Return
|
||
|
JSR PUTCHR ;And Print It
|
||
|
LDA #$0A ;Load Line Feed
|
||
|
|
||
|
;Print Character to Console
|
||
|
PUTCHR: STA IOPUTC ;Write Character to Screen
|
||
|
RTS
|
||
|
|
||
|
;Print Hexadecimal Digit
|
||
|
PRHEX: AND #$0F
|
||
|
ORA #'0'
|
||
|
BNE PUTCHR
|
||
|
|
||
|
;Print Hexadecimal Byte
|
||
|
PRBYTE: STA IOPUTH ;Put as Hexadecimal Number
|
||
|
RTS
|
||
|
|
||
|
INCLUDE "putstr.a02" ;PUTSTR routine
|
||
|
|
||
|
|
||
|
|