Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

121 lines
3.4 KiB
ArmAsm
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

*
* BDOS Function Definitions
*
reboot = 0
printstr = 9
open = 15
setdma = 26
pgmldf = 59
gettpa = 63
*
.globl _ovhdlr
.xdef _loadr
.text
*
_ovhdlr:move sr,savecc * save condition codes
movem.l d1-d7/a0-a6,saver * save all registers
movea.l (a7)+,a6 * pop pointer to inline parameter
move.l #4,d6 * adjust return address
add.l a6,d6 * to skip over table pointer
move.l d6,-(a7) * push return address
*
* GET FILE NAME AND LOAD PT
*
movea.l (a6),a6 * get ovl table address
move.l a6,d5 * check address with last loaded
cmp.l oldadd,d5 * if it's the same,
beq done * file is already loaded.
move.l a6,oldadd * save address for next time
lea.l fname,a5 * get address of name in fcb
move.l #11,d5 * set up loop counter (l2 cycles)
gfnm: move.b (a6)+,(a5)+
dbf d5,gfnm
move.l (a6),lowadr * store load point address
*
* OPEN OVERLAY FILE
*
move.l #fcb,d1
movea.l d1,a1
move.w #open,d0 *put BDOS function number in register d0
trap #2 *try to open the file to be loaded
cmpi #255,d0 *test d0 for BDOS error return code
beq openerr *if d0 = 255 then goto openerr
move.b #0,cr *zero record number in fcb
*
* FILL THE LPB
*
lea ovbspg,a3 * get address of input buffer
move.l a3,baspag * put it in LPB
move.l a1,LPB *put address of open FCB into LPB
move.l #LPB,a0 *put address of LPB into register a0
jsr _loadr *load the module
tst d0 *was the load successful?
bne lderr *if not then print error message
*
* RESTORE AND RETURN
*
done: movem.l saver,d1-d7/a0-a6 * restore all registers
move savecc,ccr * restore condition codes
rts
*
* PRINT ERROR MESSAGE
*
openerr:
move.l #openmsg,d1 *get address of error message
* *to be printed
bra print
lderr: move.l #loaderr,d1 *get address of error message to
* *be printed
print: move.w #printstr,d0 *get BDOS function number
trap #2 *print the message
move.b #36,ex *mark end of filename
move.l #fname,d1 *get address of filename
move.w #printstr,d0 *set up for BDOS call
trap #2 *print the filename
cmdrtn: move.w #reboot,d0 *get BDOS function number
trap #2 *warmboot and return to the CCP
*
* DATA
*
.data
*
* ERROR MESSAGE STRINGS
*
.even
loaderr: .dc.b 13,10,'Error Loading Overlay File $'
openmsg: .dc.b 13,10,'Unable to Open Overlay File $'
*
* BSS
*
.bss
.even
oldadd: .ds.l 1 * table for last loaded overlay
savecc: .ds.w 1
saver: .ds.l 14
ovbspg: .ds.w 64 * input buffer (like basepage) for loadr
*
* FILE CONTROL BLOCK
*
.even
fcb: .ds.b 1 * file control block
fname: .ds.b 11
ex: .ds.b 1
sysjnk: .ds.b 19
cr: .ds.b 1
*
* LOAD PARAMETER BLOCK
*
.even
LPB: .ds.l 1 *FCB address of program file
lowadr: .ds.l 1 *Low boundary of area in which
* *to load program
hiadr: .ds.l 1 *High boundary of area in which to
* *to load program
baspag: .ds.l 1 *Base page address of loaded program
usrstk: .ds.l 1 *Loaded program's initial stack pointer
flags: .ds.w 1 *Load program function control flags
.end
oad program function control flags
.end