mirror of
https://github.com/mgcaret/rom4x.git
synced 2024-09-29 01:57:32 +00:00
90 lines
2.2 KiB
ArmAsm
90 lines
2.2 KiB
ArmAsm
#include "iic+.defs"
|
|
.text
|
|
* = misc5x ; max 306 bytes
|
|
bra domenu
|
|
bra dobann
|
|
bra gtkey
|
|
bra confirm
|
|
bra ntitle
|
|
dobann jsr ntitle
|
|
ldx #(msg2-msg1) ; msg display entry point
|
|
jmp disp
|
|
domenu jsr ntitle ; "Apple ||c +"
|
|
ldx #$00 ; menu start
|
|
jsr disp ; show it
|
|
rts
|
|
gtkey lda #$60
|
|
sta ($0),y ; cursor
|
|
sta kbdstrb ; clr keyboard
|
|
kbdin lda kbd ; get key
|
|
bpl kbdin
|
|
sta kbdstrb ; clear keyboard
|
|
sta ($0),y ; put it on screen
|
|
rts
|
|
; display message, input x = message start relative to msg1
|
|
disp ldy #$0 ; needs to be zero
|
|
disp0 lda msg1,x ; get message byte
|
|
bne disp1 ; proceed if nonzero
|
|
rts ; exit if 0
|
|
disp1 inx ; next byte either way
|
|
cmp #$20 ; ' '
|
|
bcc disp2 ; start of ptr if < 20
|
|
eor #$80 ; invert high bit
|
|
sta ($0),y ; write to mem
|
|
inc $0 ; inc address low byte
|
|
bra disp0 ; back to the beginning
|
|
disp2 sta $1 ; write address high
|
|
lda msg1,x ; get it
|
|
sta $0 ; write address low
|
|
inx ; set next msg byte
|
|
bra disp0 ; back to the beginning
|
|
confirm pha
|
|
ldx #(msg3-msg1) ; ask confirm
|
|
jsr disp
|
|
jsr gtkey
|
|
plx
|
|
ora #$20 ; to lower
|
|
cmp #$f9 ; "y"
|
|
php
|
|
txa
|
|
plp
|
|
rts
|
|
; display "Apple IIc +" in a convoluted manner
|
|
; ultimately, the rts instruction here "rts" to swrts2
|
|
; which switches banks and "rts" to the title/banner firmware call
|
|
; which then "rts" to swrts (same addr as swrts2, but main bank)
|
|
; which then actually rts to our caller
|
|
ntitle lda #>(swrts2-1) ; put return addr of swrts/swrts2 on stack
|
|
pha
|
|
lda #<(swrts2-1)
|
|
pha
|
|
lda #>(banner-1) ; put addr of the Title routine on the stack
|
|
pha
|
|
lda #<(banner-1)
|
|
pha
|
|
;lda #>(swrts2-1) ; put swrts on the stack
|
|
;pha
|
|
;lda #<(swrts2-1)
|
|
;pha
|
|
;rts ; jump to swrts2
|
|
jmp swrts2 ; jump to swrts2
|
|
; msg format
|
|
; A byte < $20 indicates high byte of address.
|
|
; Next byte must be low byte of address. Anything
|
|
; else are characters to display and will have their
|
|
; upper bit inverted before being written to the screen.
|
|
msg1 = *
|
|
.db $05,$06,"0 Monitor"
|
|
.db $05,$86,"1 Reboot"
|
|
.db $06,$06,"2 Zero RAM Card"
|
|
.db $06,$86,"3 Sys Diags"
|
|
.db $07,$06,"4 RAM Card Diags"
|
|
.db $07,$86,"5 Boot 3.5/SmartPort"
|
|
.db $04,$2e,"6 Boot 5.25"
|
|
; .db $04,$ae,"7 Accelerator"
|
|
.db $07,$5f,"By M.G."
|
|
msg2 .db $07,$db,"ROM 5X 02/10/17"
|
|
.db $05,$ae,$00 ; cursor pos in menu
|
|
msg3 .db $05,$b0,"SURE? ",$00
|
|
|