mirror of https://github.com/markpmlim/EdAsm.git
493 lines
13 KiB
ArmAsm
493 lines
13 KiB
ArmAsm
Name : RELOCATOR.S
|
|
End of file : 7,244
|
|
This file was generated using the DiskBrowser utility with minimal editing.
|
|
It is meant for viewing purposes only.
|
|
|
|
;---------------------------------------------------------;
|
|
; EDASM.SYSTEM - loaded into mem at $2000-$2FFE (len $FFF)
|
|
; The 1st part of the code is the relocator ($2000-$23FF)
|
|
; The 2nd part of the code is the EdAsm Interpreter
|
|
; ($2400-2FFE) which is relocated to $B100-$BCFE (len $0BFF).
|
|
; The EI is always in memory whether in assembly/edit mode
|
|
;---------------------------------------------------------;
|
|
SYS
|
|
;
|
|
ORG $2000
|
|
;
|
|
L2000 LDX #$F0
|
|
TXS
|
|
LDX #255
|
|
LDA #0
|
|
L2007 STA Stack,X ;Zero entire stack
|
|
DEX
|
|
BNE L2007
|
|
;
|
|
LDY #19
|
|
LDA #$00 ;Mark pages $20-$BF
|
|
L2011 STA BitMap+4,Y ; as free
|
|
DEY
|
|
BPL L2011
|
|
;
|
|
LDA #<$2000 ;Starting fr $2000
|
|
STA TxtBgn+1 ; downto $0800
|
|
LDY #3
|
|
L201D LDX #8
|
|
L201F LDA BitMap,Y ; scan for the
|
|
L2022 LSR
|
|
BCS L202D ; first non-free page
|
|
DEC TxtBgn+1
|
|
DEX
|
|
BNE L2022
|
|
DEY
|
|
BNE L201D
|
|
;
|
|
L202D LDA #$01
|
|
STA TxtBgn ;=$0801 (normally)
|
|
;
|
|
JSR PRODOS8
|
|
DB $82 ;Get the date/time
|
|
L2035 DW L2035 ;No parms needed
|
|
;
|
|
LDA ROMIN2 ;Read ROM
|
|
LDA ROMIN2 ;Write-enabled RAM LC Bank2
|
|
LDA P8DATE
|
|
ORA P8DATE+1
|
|
PHP ;save Z-bit
|
|
L2044 STA CLR80VID ;Disable 80-col display mode
|
|
JSR SETNORM
|
|
L204A JSR INIT
|
|
JSR SETVID
|
|
JSR SETKBD
|
|
JSR HOME
|
|
PLP
|
|
BNE L20B6
|
|
;
|
|
; No clock card
|
|
;
|
|
LDY #$00
|
|
JSR SendBanr
|
|
LDA #0
|
|
STA CH
|
|
JSR L21DE ;enter DD
|
|
L2065 LDA #3
|
|
STA CH
|
|
JSR L22C1 ;enter MMM
|
|
BCC L2074
|
|
L206E JSR L21FB
|
|
JMP L2065
|
|
;
|
|
; Year
|
|
;
|
|
L2074 LDA #7
|
|
STA CH
|
|
JSR L2238 ;enter year digit 1
|
|
BCC L2084
|
|
L207D JSR L22AF
|
|
BCC L2074
|
|
BCS L206E
|
|
;
|
|
L2084 JSR RDKEY
|
|
CMP #BS+$80
|
|
BNE L2092
|
|
JSR L2259
|
|
BCC L2084
|
|
BCS L207D
|
|
L2092 CMP #CR+$80
|
|
BEQ L209E
|
|
LDA #BEL+$80
|
|
JSR COUT
|
|
JMP L2084
|
|
;
|
|
L209E LDA L21CF
|
|
LDX L21CE
|
|
CPX #$08
|
|
ROL
|
|
STA P8DATE+1
|
|
TXA
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ORA Day
|
|
STA P8DATE
|
|
;
|
|
L20B6 JSR PRODOS8 ;Get prefix
|
|
DB $C7
|
|
DW CurrPfxP
|
|
LDA CurrPfxB
|
|
BNE L20E1
|
|
;
|
|
; No current prefix
|
|
;
|
|
LDA LASTDEV
|
|
STA OLUnit
|
|
JSR PRODOS8
|
|
DB $C5
|
|
DW OnLineP
|
|
;
|
|
LDA CurrPfxB+1
|
|
AND #$0F ;Get len byte of volname
|
|
CLC
|
|
ADC #2
|
|
STA CurrPfxB
|
|
TAY
|
|
LDA #'/' ;Prepend and append volname
|
|
STA CurrPfxB+1 ; with a slash
|
|
STA CurrPfxB,Y
|
|
;
|
|
; The code below assumes the TxBuf2 area has been
|
|
; setup properly by ProDOS8
|
|
;
|
|
L20E1 LDX TxBuf2 ;Do we have a trailing /?
|
|
INX
|
|
L20E5 DEX
|
|
BEQ L20FC ;No trailing /
|
|
LDA #'/'
|
|
EOR TxBuf2,X
|
|
ASL
|
|
BNE L20E5 ;No, keep looking
|
|
;
|
|
DEX ;Got a trailing /, so remove
|
|
STX TxBuf2 ; it by just adjusting len byte
|
|
;
|
|
JSR PRODOS8 ;Make this the default prefix
|
|
DB $C6
|
|
DW SDefPfxP
|
|
BNE ShowErr
|
|
;
|
|
; Get the prefix to Edasm's directory
|
|
;
|
|
L20FC JSR PRODOS8 ;Get prefix
|
|
DB $C7
|
|
DW PFX3P
|
|
BNE ShowErr
|
|
JSR L2342 ;Backup ProDOS Quit code
|
|
;
|
|
; Setup to relocate the EdAsm Interpreter
|
|
; to its final location @ $B100
|
|
;
|
|
LDA #>L2400 ;EI's load addr
|
|
STA A1 ;start=$2400
|
|
LDA #<L2400
|
|
STA A1+1
|
|
LDA #$27
|
|
STA A2 ;end=$2E27
|
|
LDA #$2E
|
|
STA A2+1
|
|
LDA #>EIStart
|
|
STA A4 ;dest
|
|
LDA #<EIStart
|
|
STA A4+1
|
|
LDA #<EIStart-1 ;Jump to $B100 after MOVE completed
|
|
PHA
|
|
LDA #>EIStart-1
|
|
PHA
|
|
LDY #0
|
|
LDA ROMIN2 ;read ROM
|
|
LDA ROMIN2 ;write-enabled LC Bank2 RAM
|
|
JMP MOVE
|
|
;=================================================
|
|
; Use this to set the default prefix
|
|
;
|
|
SDefPfxP DB $01
|
|
DW TxBuf2
|
|
;
|
|
; Use this parameter block to get the current prefix
|
|
;
|
|
CurrPfxP DB $01
|
|
DW CurrPfxB
|
|
;
|
|
; EdAsm's Dir is where the 3 files EdAsm.Ed,
|
|
; Edasm.Asm and Edasm.System resides
|
|
;
|
|
PFX3P DB $01
|
|
DW EdAsmDir
|
|
;
|
|
OnLineP DB $02
|
|
OLUnit DB $60
|
|
DW CurrPfxB+1
|
|
;=================================================
|
|
ShowErr STA ErrCode
|
|
TSX
|
|
STX StackP2
|
|
LDX #$80
|
|
L2144 TXS
|
|
L2145 STA CLR80VID
|
|
JSR SETNORM
|
|
JSR INIT
|
|
LDA RDROM2 ;read ROM, write-protect RAM LC Bank2
|
|
JSR SETKBD
|
|
JSR SETVID
|
|
JSR HOME
|
|
JSR PRERR ;PRINT "ERR=XX"
|
|
LDA ErrCode
|
|
JSR $FDD3 ;unsupported mon entry point
|
|
JMP MON
|
|
;
|
|
SendBanr LDA Banner,Y
|
|
BPL L2171
|
|
JSR COUT
|
|
INY
|
|
JMP SendBanr
|
|
L2171 RTS
|
|
;
|
|
MSB ON
|
|
Banner DB $8D,$8D,$8D
|
|
ASC " PRODOS EDITOR-ASSEMBLER //"
|
|
DB $8D,$8D,$8D,$8D,$8D,$8D
|
|
ASC "ENTER THE DATE AND PRESS RETURN"
|
|
DB $8D,$8D
|
|
ASC "DD-MMM-YY"
|
|
DB 0
|
|
MSB OFF
|
|
TensT DB 00,10,20,30,40,50,60,70,80,90
|
|
Day DB $00
|
|
L21CE DB $00
|
|
L21CF DB $00
|
|
L21D0 DB $00
|
|
L21D1 DB $00
|
|
MMM DS 3,0
|
|
;
|
|
L21D5 LDA #BEL+$80
|
|
JSR COUT
|
|
L21DA LDA #$00
|
|
STA CH
|
|
L21DE JSR RDKEY
|
|
CMP #'0'+$80
|
|
BCC L21D5
|
|
CMP #'3'+1+$80
|
|
BCS L21D5
|
|
JSR COUT
|
|
AND #$0F
|
|
TAX
|
|
LDA TensT,X
|
|
STA Day
|
|
STA L21D0
|
|
JMP L220D
|
|
;
|
|
L21FB LDA L21D0
|
|
STA Day
|
|
LDA #1
|
|
STA CH
|
|
JMP L220D ;enter 2nd digit for DD
|
|
;
|
|
L2208 LDA #BEL+$80
|
|
JSR COUT
|
|
L220D JSR RDKEY
|
|
CMP #BS+$80
|
|
BEQ L21DA
|
|
CMP #'0'+$80
|
|
BCC L2208
|
|
CMP #'9'+1+$80
|
|
BCS L2208
|
|
JSR COUT
|
|
AND #$0F
|
|
CLC
|
|
ADC Day
|
|
STA Day
|
|
BEQ L21D5
|
|
CMP #31+1 ;at most 31
|
|
BCS L21D5 ;err
|
|
RTS
|
|
; Year
|
|
L222F LDA #BEL+$80
|
|
JSR COUT
|
|
L2234 LDA #7
|
|
STA CH
|
|
L2238 JSR RDKEY
|
|
CMP #BS+$80
|
|
BEQ L2289
|
|
CMP #'0'+$80
|
|
BCC L222F
|
|
CMP #'9'+1+$80
|
|
BCS L222F
|
|
JSR COUT
|
|
AND #$0F
|
|
TAX
|
|
LDA TensT,X
|
|
STA L21CF
|
|
STA L21D1
|
|
JMP L226B
|
|
;
|
|
L2259 LDA L21D1
|
|
STA L21CF
|
|
LDA #$08
|
|
STA CH
|
|
JMP L226B
|
|
;
|
|
L2266 LDA #BEL+$80
|
|
JSR COUT
|
|
L226B JSR RDKEY
|
|
CMP #BS+$80
|
|
BEQ L2234
|
|
CMP #'0'+$80
|
|
BCC L2266
|
|
CMP #'9+1+$80
|
|
BCS L2266
|
|
JSR COUT
|
|
AND #$0F
|
|
CLC
|
|
ADC L21CF
|
|
STA L21CF
|
|
BEQ L222F
|
|
CLC
|
|
L2289 RTS
|
|
;
|
|
L228A DB $A0
|
|
MSB ON
|
|
Months ASC "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
|
|
MSB OFF
|
|
;
|
|
L22AF LDA #5 ;3rd letter of MMM
|
|
STA CH
|
|
JMP L22DF
|
|
;
|
|
L22B6 SEC
|
|
RTS
|
|
;
|
|
; Month entry
|
|
;
|
|
L22B8 LDA #BEL+$80
|
|
JSR COUT
|
|
L22BD LDA #3 ;1st letter of MMM
|
|
STA CH
|
|
L22C1 JSR ToUCase
|
|
CMP #BS+$80
|
|
BEQ L22B6
|
|
JSR PRUCase
|
|
BCS L22C1
|
|
STA MMM
|
|
L22D0 JSR ToUCase
|
|
CMP #BS+$80
|
|
BEQ L22BD
|
|
JSR PRUCase
|
|
BCS L22D0
|
|
STA MMM+1
|
|
L22DF JSR ToUCase
|
|
CMP #BS+$80
|
|
BNE L22EC
|
|
JSR COUT
|
|
JMP L22D0
|
|
;
|
|
L22EC JSR PRUCase
|
|
BCS L22DF
|
|
STA MMM+2
|
|
;
|
|
LDX #$00
|
|
STX L21CE
|
|
L22F9 LDY #$00
|
|
INC L21CE
|
|
STX L228A
|
|
L2301 LDA MMM,Y
|
|
CMP Months,X
|
|
BNE L2311
|
|
INX
|
|
INY
|
|
CPY #$03
|
|
BCC L2301
|
|
BEQ L2322 ;match
|
|
L2311 LDX L228A
|
|
INX
|
|
INX
|
|
INX
|
|
CPX #48 ;bug? (should be 36)
|
|
BCC L22F9
|
|
;
|
|
LDA #3
|
|
STA CH
|
|
JMP L22B8 ;re-enter
|
|
L2322 CLC
|
|
RTS
|
|
;
|
|
; Display char (in A) as uppercase letter
|
|
;
|
|
PRUCase CMP #'A'+$80
|
|
BCC BELL
|
|
CMP #'Z'+1+$80
|
|
BCS BELL
|
|
JSR COUT
|
|
CLC
|
|
RTS
|
|
BELL LDA #BEL+$80
|
|
JSR COUT
|
|
SEC
|
|
RTS
|
|
;
|
|
ToUCase JSR RDKEY
|
|
CMP #$E0 ;should be "a" ($E1)
|
|
BCC L2341
|
|
AND #$DF
|
|
L2341 RTS
|
|
;=================================================
|
|
; Move ProDOS Quit code fr LCBank2 to main 48K mem
|
|
; first. Save code as EdAsm.Swap
|
|
;
|
|
L2342 LDA RDBANK2 ;read and write-protect RAM LC Bank2
|
|
LDA RDBANK2
|
|
LDA #>XD000
|
|
STA A1 ;start=$D000
|
|
LDA #<XD000
|
|
STA A1+1
|
|
LDA #>X3000
|
|
STA A2 ;dest=$3000
|
|
LDA #<X3000
|
|
STA A2+1
|
|
;
|
|
LDY #0
|
|
L235A LDA (A1),Y
|
|
STA (A2),Y
|
|
INY
|
|
BNE L235A
|
|
INC A1+1
|
|
INC A2+1
|
|
LDA A1+1
|
|
CMP #<XD000+$1000 ;$D000-$DFFF
|
|
BCC L235A ;Next mem page
|
|
;
|
|
LDA ROMIN2 ;read ROM
|
|
LDA ROMIN2 ;write enable LC Bank2 RAM
|
|
JSR PRODOS8
|
|
DB $C8
|
|
DW OpenSwapP
|
|
BEQ L237A
|
|
RTS
|
|
;
|
|
L237A LDA SwapRN
|
|
STA WrSwapRN
|
|
STA ClsSwapRN
|
|
JSR PRODOS8
|
|
DB $CB
|
|
DW WrSwapP
|
|
JSR PRODOS8
|
|
DB $CC
|
|
DW ClsSwapP
|
|
RTS
|
|
;=================================================
|
|
; These ProDOS parameter blocks are used for EDASM.SWAP
|
|
;
|
|
X3000 EQU $3000
|
|
X4000 EQU $4000 ;addr of 1024-byte file buffer
|
|
;
|
|
OpenSwapP DB $03
|
|
DW SwapFileS
|
|
DW X4000
|
|
SwapRN DB $00
|
|
;
|
|
SwapFileS STR 'EDASM.SWAP'
|
|
;
|
|
WrSwapP DB $04
|
|
WrSwapRN DB $B0
|
|
DW X3000 ;Data buffer
|
|
DW $1000 ;# of bytes to write
|
|
DW $0000
|
|
;
|
|
ClsSwapP DB $01
|
|
ClsSwapRN DB $C2
|
|
;=================================================
|
|
STR ' (c) COPYRIGHT 1983 BY'
|
|
STR ' JOHN O. ARKLEY'
|
|
STR ' ALL RIGHTS RESERVED'
|
|
;DS \,$EA
|
|
DS $2400-*,$EA
|
|
L2400 EQU * |