Upload files to "kernal"
This commit is contained in:
+200
@@ -0,0 +1,200 @@
|
||||
; wozmon.asm
|
||||
;
|
||||
; Originally from Apple-1 Operation Manual, Steve Wozniak, 1976
|
||||
; Revised 2024 May 8 for Commodore 64/VIC/128 by David R. Van Wagner davevw.com
|
||||
; Imported to integrated KERNAL segment by insanity213 youtube.com/@retrotechinsanity
|
||||
; * Using C64 KERNAL (instead of MC6520 and KBD/CRT)
|
||||
; * extra processing for expected mark parity, software caps lock, and revised newline/carriage return processing
|
||||
; * revised to expect terminal line edit mode instead of echo off character processing
|
||||
; * revised to acme syntax
|
||||
; * different zero page usage
|
||||
; * changed l/h to wl/wh because vice didn't like that symbol
|
||||
; * reverse toggle instead of spaces only on vic-20 (like HESMON) because too few columns
|
||||
|
||||
; zero page usage - tape stuff on vic-20, 64, 128. Needs to change for PET, TED, Plus/4, 16, etc.
|
||||
.segment "WOZMON"
|
||||
.export WOZMON_ENTRY
|
||||
xaml=$a3
|
||||
xamh=$a4
|
||||
stl=$a5
|
||||
sth=$a6
|
||||
wl=$a7
|
||||
wh=$a8
|
||||
ysav=$a9
|
||||
wm_mode=$aa
|
||||
|
||||
in=$200 ; same as Commodore uses, should be fine to copy from/to this, will probably use slightly less
|
||||
|
||||
;** C64, etc. support added by David R. Van Wagner davevw.com ***************************************
|
||||
; Commodore KENRAL
|
||||
CHROUT=$FFD2
|
||||
CHRIN=$FFCF
|
||||
;** C64 etc. support added by David R. Van Wagner davevw.com ***************************************
|
||||
|
||||
|
||||
WOZMON_ENTRY:
|
||||
cld
|
||||
cli
|
||||
jmp escape
|
||||
|
||||
;** C64, etc. support added by David R. Van Wagner davevw.com ***************************************
|
||||
KBD_IN:
|
||||
sty $22
|
||||
jsr CHRIN ; note: full screen editor
|
||||
ldy $22
|
||||
rts
|
||||
;** C64, etc. support added by David R. Van Wagner davevw.com ***************************************
|
||||
|
||||
notcr:
|
||||
cmp #$DF ; underscore or Commodore back arrow (rub out?)
|
||||
beq backspace
|
||||
cmp #$83
|
||||
beq escape
|
||||
iny
|
||||
bpl nextchar
|
||||
escape:
|
||||
lda #$25 ; prompt
|
||||
jsr echo
|
||||
getline:
|
||||
lda #13
|
||||
jsr echo
|
||||
ldy #1
|
||||
backspace:
|
||||
dey
|
||||
bmi getline
|
||||
nextchar:
|
||||
jsr KBD_IN
|
||||
ora #$80
|
||||
sta in, y
|
||||
;jsr echo - needed only if terminal echo off, line editing off
|
||||
cmp #$8D
|
||||
bne notcr
|
||||
ldy #$ff
|
||||
lda #$00
|
||||
tax
|
||||
setstor:
|
||||
asl
|
||||
setmode:
|
||||
sta wm_mode
|
||||
blskip:
|
||||
iny
|
||||
nextitem:
|
||||
lda in, y
|
||||
cmp #$8D
|
||||
beq getline
|
||||
cmp #$AE ; period
|
||||
bcc blskip
|
||||
beq setmode
|
||||
cmp #$BA ; colon
|
||||
beq setstor
|
||||
cmp #$D2 ; R
|
||||
beq run
|
||||
stx wl
|
||||
stx wh
|
||||
sty ysav
|
||||
nexthex:
|
||||
lda in, y
|
||||
eor #$B0
|
||||
cmp #$0A
|
||||
bcc dig
|
||||
adc #$88
|
||||
cmp #$FA
|
||||
bcc nothex
|
||||
dig:
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
ldx #4
|
||||
hexshift:
|
||||
asl
|
||||
rol wl
|
||||
rol wh
|
||||
dex
|
||||
bne hexshift
|
||||
iny
|
||||
bne nexthex
|
||||
nothex:
|
||||
cpy ysav
|
||||
beq escape
|
||||
bit wm_mode
|
||||
bvc notstor
|
||||
lda wl
|
||||
sta (stl, x)
|
||||
inc stl
|
||||
bne nextitem
|
||||
inc sth
|
||||
tonextitem:
|
||||
jmp nextitem
|
||||
run:
|
||||
jmp (xaml)
|
||||
notstor:
|
||||
bmi xamnext
|
||||
ldx #2
|
||||
setadr:
|
||||
lda wl-1,x
|
||||
sta stl-1,x
|
||||
sta xaml-1,x
|
||||
dex
|
||||
bne setadr
|
||||
nxtprnt:
|
||||
bne prdata
|
||||
lda #13
|
||||
jsr echo
|
||||
lda xamh
|
||||
jsr prbyte
|
||||
lda xaml
|
||||
jsr prbyte
|
||||
lda #$BA ; colon
|
||||
jsr echo
|
||||
prdata:
|
||||
lda #32
|
||||
jsr echo
|
||||
lda (xaml,x)
|
||||
jsr prbyte
|
||||
xamnext:
|
||||
stx wm_mode
|
||||
lda xaml
|
||||
cmp wl
|
||||
lda xamh
|
||||
sbc wh
|
||||
bcs tonextitem
|
||||
inc xaml
|
||||
bne mod8chk
|
||||
inc xamh
|
||||
mod8chk:
|
||||
lda xaml
|
||||
and #7
|
||||
bpl nxtprnt ; should always branch
|
||||
prbyte:
|
||||
pha
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
jsr prhex
|
||||
pla
|
||||
prhex:
|
||||
and #$0F
|
||||
ora #$B0
|
||||
cmp #$BA
|
||||
bcc echo
|
||||
adc #6
|
||||
echo:
|
||||
;** C64, etc. support added by David R. Van Wagner davevw.com ***************************************
|
||||
and #$7f ; strip mark bit
|
||||
cmp #32 ; space?
|
||||
bne notspace
|
||||
lda $FF80 ; Commodore ROM version
|
||||
cmp #$16 ; VIC?
|
||||
bne notvic
|
||||
lda 199
|
||||
eor #18 ; invert reverse state
|
||||
sta 199
|
||||
rts
|
||||
notvic:
|
||||
lda #32
|
||||
notspace:
|
||||
jmp CHROUT
|
||||
;** C64, etc. support added by David R. Van Wagner davevw.com ***************************************
|
||||
|
||||
Reference in New Issue
Block a user