69 lines
1.4 KiB
ArmAsm
69 lines
1.4 KiB
ArmAsm
|
|
; Based on BSM (Bit Shifter's Monitor)
|
|
|
|
|
|
Mon_Memory:
|
|
|
|
jsr Set_MODE_80
|
|
lda #$00
|
|
sta Addr_Mode ; by default use C64-style addressing
|
|
|
|
jsr Get_Val_To_LAC ; get 1st parameter (start address)
|
|
+beq Mon_Error
|
|
jsr LAC_To_LPC ; Long_PC = start address
|
|
|
|
jsr Get_Val_To_LAC ; get 2nd parameter (end address)
|
|
bne @calcdiff
|
|
|
|
lda #$10 ; by default display 16 rows
|
|
sta Long_CT+0
|
|
lda #$00
|
|
sta Long_CT+1
|
|
sta Long_CT+2
|
|
sta Long_CT+3
|
|
|
|
bra @loop
|
|
|
|
@calcdiff:
|
|
jsr LAC_Minus_LPC ; Long_CT = range
|
|
+bcc Mon_Error ; error if negative range
|
|
|
|
ldx #$04 ; for 80 character mode - 16 (2^4) bytes/line
|
|
bbr7 MODE_80,@shift
|
|
dex ; for 40 character mode - 8 (2^3) bytes/line
|
|
|
|
@shift:
|
|
clc
|
|
ror Long_CT+3
|
|
ror Long_CT+2
|
|
ror Long_CT+1
|
|
ror Long_CT+0
|
|
|
|
dex
|
|
bne @shift ; at the ned of loop Long_CT contains number of rows to show minus 1
|
|
|
|
@loop:
|
|
|
|
jsr Dump_Row
|
|
jsr STOP
|
|
beq @exit ; end if STOP pressed
|
|
|
|
sec ; XXX consider moving this to separate subroutine
|
|
lda Long_CT+0
|
|
sbc #$01
|
|
sta Long_CT+0
|
|
lda Long_CT+1
|
|
sbc #$00
|
|
sta Long_CT+1
|
|
lda Long_CT+2
|
|
sbc #$00
|
|
sta Long_CT+2
|
|
lda Long_CT+3
|
|
sbc #$00
|
|
sta Long_CT+3
|
|
bcs @loop
|
|
|
|
@exit:
|
|
|
|
jmp Main
|