mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 00:14:25 +00:00
132 lines
3.6 KiB
Plaintext
132 lines
3.6 KiB
Plaintext
;*************************************************
|
|
;** Change history --
|
|
;** 30mar81: Broken off from general interface.
|
|
;** 30mar81: Set up for Zilog ZLAB 8000
|
|
;** 09may81: Tell cpu when state is free.
|
|
;** 19jan82: Allow segmented users.
|
|
;** 21jan82: Took out references to freecpu and needcpu
|
|
;** 15feb82: Dummy out need/free cpu.
|
|
;** 13may82: Comment out references to setfp and resfp
|
|
;*************************************************
|
|
|
|
.title "sysdep MODULE"
|
|
.input "biosdefs2.z8k"
|
|
|
|
;*************************************************
|
|
;** SAVED CPU STATE --
|
|
;** is specified by the following "constants."
|
|
;** Offset stapcsg must point to the word preceding
|
|
;** the saved PC offset, EVEN FOR NONSEGMENTED
|
|
;** OPERATION.
|
|
;*************************************************
|
|
__data .sect
|
|
.GLOBAL stareg,staevnt,stafcw,stapcsg
|
|
stareg .WORD 4 ;offset of r0
|
|
staevnt .WORD 36 ;saved 1st word
|
|
stafcw .WORD 38 ;saved fcw
|
|
stapcsg .WORD 40 ;seg word of PC
|
|
|
|
;*************************************************
|
|
;** ADDRESSES --
|
|
;** as input parameters to the routines below are
|
|
;** delivered in register pairs (i.e. as though
|
|
;** segmented). The high-order word of such an
|
|
;** address is undefined when the process running
|
|
;** in that address space runs in nonsegmented
|
|
;** mode.
|
|
;*************************************************
|
|
.eject
|
|
;*************************************************
|
|
;** GET NEXT INSTRUCTION WORD --
|
|
;** Input:
|
|
;** rr6 = saved PC -- seg # must be fixed for
|
|
;** nonseg users
|
|
;** Output:
|
|
;** r3 = next instruction word
|
|
;*************************************************
|
|
__data .sect
|
|
gttxt: .WORD 0
|
|
__text .sect
|
|
.GLOBAL gettext
|
|
gettext: ; PROCEDURE ENTRY
|
|
; ld r5,#2 ; it is system data
|
|
; ldl rr2,#0 ; required parameter
|
|
; sc #MEM_SC ; MAP source
|
|
|
|
pushl @r15,rr6
|
|
ld r7,#gttxt ; address of temp
|
|
ld r5,#0 ; it is caller Instruction
|
|
ldl rr2,#0 ; required parameter
|
|
sc #MEM_SC ; MAP destination
|
|
|
|
ldl rr4,rr6
|
|
popl rr6,@r15 ; restore source
|
|
ldl rr2,#2 ; byte count to move
|
|
sc #MEM_SC ; DO TRANSFER
|
|
|
|
ld r3,gttxt ; load return values
|
|
ldb rl2,#0
|
|
ret
|
|
|
|
.eject
|
|
;*************************************************
|
|
;** GET MEMORY BYTES --
|
|
;** Segmented emulator input --
|
|
;** rr6 - src address (trapee space)
|
|
;** rr4 - dst address (emulator space)
|
|
;** r3 - byte count
|
|
;*************************************************
|
|
.GLOBAL getmem
|
|
getmem:
|
|
push @r15,r3
|
|
pushl @r15,rr4 ; save dest - MEM_SC steps on rr4
|
|
ld r5,#4 ; it is TPA data
|
|
ldl rr2,#0 ; required parameter
|
|
sc #MEM_SC ; MAP source
|
|
|
|
popl rr4,@r15 ; restore dest
|
|
pushl @r15,rr6 ; save source
|
|
ldl rr6,rr4 ; position dest
|
|
ld r5,#0 ; it is caller data
|
|
ldl rr2,#0 ; required parameter
|
|
sc #MEM_SC ; MAP destination
|
|
|
|
ldl rr4,rr6
|
|
popl rr6,@r15 ; restore source
|
|
pop r3,@r15 ; restore byte count
|
|
ld r2,#0 ; requrired parameter
|
|
sc #MEM_SC ; DO TRANSFER
|
|
|
|
ret
|
|
|
|
.eject
|
|
;*************************************************
|
|
;** PUT MEMORY BYTES --
|
|
;** Emulator input --
|
|
;** rr6 - src address (emulator space)
|
|
;** rr4 - dst address (trapee space)
|
|
;** r3 - byte count
|
|
;*************************************************
|
|
.GLOBAL putmem
|
|
putmem: ; PROCEDURE ENTRY
|
|
push @r15,r3
|
|
pushl @r15,rr4 ; save dest - MEM_SC steps on rr4
|
|
ld r5,#0 ; it is caller data
|
|
ldl rr2,#0 ; required parameter
|
|
sc #MEM_SC ; MAP source
|
|
|
|
popl rr4,@r15
|
|
pushl @r15,rr6 ; save source
|
|
ldl rr6,rr4 ; position destination
|
|
ld r5,#4 ; it is TPA data
|
|
ldl rr2,#0 ; required parameter
|
|
sc #MEM_SC ; MAP destination
|
|
|
|
ldl rr4,rr6 ; put mapped dest in rr4
|
|
popl rr6,@r15 ; restore source
|
|
pop r3,@r15 ; restore byte count
|
|
ld r2,#0 ; required parameter
|
|
sc #MEM_SC ; DO TRANSFER
|
|
|
|
ret
|