mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-12-01 14:51:52 +00:00
81 lines
2.4 KiB
NASM
81 lines
2.4 KiB
NASM
; py65mon program initialization code for c02 programs
|
|
|
|
;System Specific ASCII Key Mappings
|
|
DELKEY EQU $7F ;Delete/Backspace Key (Delete)
|
|
ESCKEY EQU $1B ;Escape/Stop Key (Escape)
|
|
RTNKEY EQU $0D ;Return/Enter Key (Carriage Return)
|
|
|
|
;Zero Page Locations
|
|
strlo EQU $30 ;String Pointer (stdio.asm)
|
|
strhi EQU $31
|
|
dstlo EQU $32 ;Source String Pointer (string.asm)
|
|
dsthi EQU $33
|
|
|
|
rdseed EQU $3E ;Pseudo-Random Seed
|
|
random EQU $3F ;Pseudo-Random Number Storage
|
|
temp0 EQU $40 ;Temporary Storage
|
|
temp1 EQU $41
|
|
temp2 EQU $42
|
|
|
|
;Memory Mapped I/O
|
|
putc EQU $F001 ;Write Character to Console
|
|
getc EQU $F004 ;Read Character from Console
|
|
|
|
ORG $0200 ;Start Directly Above Stack
|
|
|
|
start: JMP main ;Execute Program
|
|
|
|
;Poll Character from Keyboard
|
|
plkey: INC rdseed ;Cycle the Random Seed (if not provided by system)
|
|
LDA getc ;Read Character from Console
|
|
RTS
|
|
|
|
;Read Character from Console
|
|
getkey; ;Same As rdkey
|
|
|
|
;Wait for Character from Console
|
|
rdkey: JSR plkey ;Read Character from Console
|
|
BEQ rdkey ; Loop if None Received
|
|
RTS
|
|
|
|
;Delete Previous Character
|
|
delchr: LDA #$08 ;Load Backspace into Accumulator
|
|
JSR prchr ; and Print it
|
|
LDA #$20 ;Load Space into Accumulater
|
|
JSR prchr ; and Print it
|
|
LDA #$08 ;Load Backspace into Accumulator
|
|
JMP prchr ; and Print it
|
|
|
|
;Advance Character to Next line
|
|
newlin: LDA #$0D ;Load C/R into Accumulator
|
|
JSR prchr ; and Print it
|
|
LDA #$0A ;Load L/F into Accumulater
|
|
; and fall into prchr
|
|
|
|
;Print Character to Console
|
|
prchr: STA putc ;Write Character to Console
|
|
RTS
|
|
|
|
exit: BRK ;Return to Monitor
|
|
|
|
;Print Byte as Two-Digit Hex Number to Console
|
|
prbyte: PHA ;Save Accumulater
|
|
LSR ;Shift Hi Nybble to Low Nybble
|
|
LSR
|
|
LSR
|
|
LSR
|
|
JSR prhex ; and Print it
|
|
PLA ;Restore Accumulator
|
|
; and fall into prhex
|
|
|
|
;Print Low Nybble as Hex Digit to Console
|
|
prhex: AND #$0F ;Strip High Nybb
|
|
SED ;Set Decimal Flag for
|
|
CLC ; Addition Wizardry
|
|
ADC #$90 ;Convert to $90-$99,$00-$05
|
|
ADC #$40 ;Convert to $30-$39,$41-$46
|
|
CLD ;Clear Decimal Flag
|
|
JMP prchr ;Print Hex Digit and Return
|
|
|
|
|