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 #EIStart STA A4 ;dest 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 #X3000 STA A2 ;dest=$3000 LDA #