home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Club Elmshorn Atari PD
/
CCE_PD.iso
/
pc
/
0500
/
CCE_0574.ZIP
/
CCE_0574.PD
/
FALCTRUE.SHW
/
FSS.S
< prev
next >
Wrap
Text File
|
1993-05-11
|
7KB
|
360 lines
; FalconScreen
; ============
;
; Copyright 1993 by Markus Gutschke
;
; For detailed information read the README file or the header
; of the C module
;
;
; Export interfaces to system calls
export LineA0
export Kbshift,Physbase,Setscreen,Vsetmode,Montype
export VsetRGB,VgetRGB
export Pterm0,Cnecin,Cconws,Cconis,Srealloc,Super,Fopen
export Fclose,Fread,Fwrite,Fseek,Malloc,Mfree
; Import some C-function and global variables
import main,init,setscreen,vsetmode,vgetsize
import settings
equ stacksize,$1000 ; the programs initial stack size
equ ID,$E4465343 ; XBRA Id (c.f. C module)
offset 0 ; data structure of the patch
magic: ds.l 1 ; area
size: ds.w 1
mask: ds.w 1
value: ds.w 1
planes: ds.w 1
n: ds.w 1
width: ds.w 1
height: ds.w 1
text
bra.b start ; this instruction has to be 2 bytes long
set: dc.l settings ; pointer to patch area
start: move.l set,a0 ; check integrity of the executable
cmpi.l #ID,magic(a0)
beq valprg
Pterm0: clr.w -(sp) ; terminate
trap #1
valprg: move.l 4(sp),a0 ; get address of basepage
move.l #256,d0 ; calculate program size
add.l 12(a0),d0
add.l 20(a0),d0
add.l 28(a0),d0
move.l d0,d1
add.l #stacksize,d1 ; initialize user stack
move.l d1,d2
add.l a0,d2
andi.b #$FC,d2
move.l d2,sp
clr.w -(sp) ; set parameters for Ptermres
move.l d0,-(sp)
move.w #$31,-(sp)
move.l d1,-(sp) ; Mshrink
pea (a0)
move.l #$4a0000,-(sp)
trap #1
lea $c(sp),sp
bsr main ; call C module
move.w d0,-(sp)
pea vdiinit ; initialize trap handler
move.w #$26,-(sp)
trap #$e
addq.l #6,sp
tst.w (sp)+
beq done
move.l #$00030088,-(sp); force reinitialization of
pea 0.w ; video mode...
pea 0.w ; (does not work under MiNT!)
move.w #$5,-(sp)
trap #$e
lea $e(sp),sp
move.l #$0003001a,-(sp)
pea 0.w
pea 0.w
move.w #$5,-(sp)
trap #$e
lea $e(sp),sp
done: trap #1 ; Ptermres
vdiinit:move.l $88.w,vdivec ; link into trap handler
move.l #vdihdl,$88.w
move.l $b8.w,xbvec
move.l #xbhdl,$b8.w
rts
dc.l 'XBRA'
dc.l ID
vdivec: ds.l 1
vdihdl: cmpi.w #115,d0 ; check for VDI call
beq isvdi
doold: move.l vdivec,-(sp)
rts
isvdi: move.l d1,a0
move.l (a0),a1
cmpi.w #1,(a1) ; check for v_opnwk
bne doold
move.l 4(a0),a1
cmpi.w #11,(a1) ; check device handle
bhs doold
move.l a0,-(sp)
tst.w $59e.w ; set up fake stack frame
beq vshort
clr.w -(sp)
vshort: pea vcont(pc)
move.w sr,-(sp)
move.l vdivec,-(sp)
rts ; call v_opnw
vcont: move.l #$58ffff,-(sp) ; check resolution
trap #$e
addq.l #4,sp
move.l set,a0
and.w mask(a0),d0
cmp.w value(a0),d0
movem.l (sp)+,a0
bne illres
move.l $c(a0),a1 ; patch intout array
move.l set,a0
move.w width(a0),d0
subq #1,d0
move.w d0,(a1)
move.w height(a0),d0
subq #1,d0
move.w d0,2(a1)
moveq #1,d0
move.w planes(a0),d1
lsl.w d1,d0
move.w d0,26(a1)
movem.l d0-d2,-(sp)
moveq #0,d0
bsr init ; initialize without realloc!
movem.l (sp)+,d0-d2
illres: rte
dc.l 'XBRA'
dc.l ID
xbvec: ds.l 1
xbhdl: move.l usp,a0
btst.b #5,(sp)
beq xbstk
lea 6(sp),a0
tst.w $59e.w
beq xbstk
lea 8(sp),a0
xbstk: move.w (a0),d0
cmpi.w #5,d0 ; Vsetscreen
bhi nosetsc
blo oldxb
lea xscont(pc),a1
xbfake: move.l $c(a0),-(sp) ; copy parameters
move.l $8(a0),-(sp)
move.l $4(a0),-(sp)
move.l (a0),-(sp)
tst.w $59e.w ; set up fake stack frame
beq xbshort
clr.w -(sp)
xbshort:pea (a1)
move.w sr,-(sp)
oldxb: move.l xbvec,-(sp) ; call old xbios handler
rts
nosetsc:cmpi.w #$58,d0 ; Vsetmode
blo oldxb
bhi novsmd
lea xmcont(pc),a1
bra xbfake
novsmd: cmpi.w #$5b,d0 ; Vgetsize
bne oldxb
lea xzcont(pc),a1
bra xbfake
xscont: move.w $a(sp),d1
move.w $c(sp),d2
move.l 6(sp),a1
move.l 2(sp),a0
bsr setscreen
lea $10(sp),sp
rte
xmcont: move.w 2(sp),d1
bsr vsetmode
lea $10(sp),sp
rte
xzcont: move.w 2(sp),d1
bsr vgetsize
lea $10(sp),sp
rte
;
; this is a list of binding for OS calls, so we do not need to link
; any libraries...
;
LineA0: movem.l d3-d7/a2-a6,-(sp)
dc.w $a000
move.l d0,a0
movem.l (sp)+,d3-d7/a2-a6
rts
Kbshift:move.l a2,-(sp)
move.w d0,-(sp)
move.w #$b,-(sp)
trap #$d
addq.l #4,sp
move.l (sp)+,a2
rts
Physbase:move.l a2,-(sp)
move.w #2,-(sp)
trap #$e
addq.l #2,sp
move.l d0,a0
move.l (sp)+,a2
rts
Setscreen:move.l a2,-(sp)
move.w d1,-(sp)
move.w d0,-(sp)
pea (a1)
pea (a0)
move.w #5,-(sp)
trap #$e
lea $e(sp),sp
move.l (sp)+,a2
rts
Vsetmode:move.l a2,-(sp)
move.w d0,-(sp)
move.w #$58,-(sp)
trap #$e
addq.l #4,sp
move.l (sp)+,a2
rts
Montype:move.l a2,-(sp)
move.w #$59,-(sp)
trap #$e
addq.l #2,sp
move.l (sp)+,a2
rts
VgetRGB:move.w #$5e,d2
bra VRGB
VsetRGB:move.w #$5d,d2
VRGB: move.l a2,-(sp)
move.l a0,-(sp)
move.w d1,-(sp)
move.w d0,-(sp)
move.w d2,-(sp)
trap #$e
lea $a(sp),sp
move.l (sp)+,a2
rts
Cnecin: movem.l d3-d4/a2-a4,-(sp)
move.w #8,-(sp)
trap #1
addq.l #2,sp
movem.l (sp)+,d3-d4/a2-a4
rts
Cconws: movem.l d3-d4/a2-a4,-(sp)
pea (a0)
move.w #9,-(sp)
trap #1
addq.l #6,sp
movem.l (sp)+,d3-d4/a2-a4
rts
Cconis: movem.l d3-d4/a2-a4,-(sp)
move.w #$b,-(sp)
trap #1
addq.l #2,sp
movem.l (sp)+,d3-d4/a2-a4
rts
Srealloc:movem.l d3-d4/a2-a4,-(sp)
move.l d0,-(sp)
move.w #$15,-(sp)
trap #1
addq.l #6,sp
move.l d0,a0
movem.l (sp)+,d3-d4/a2-a4
rts
Super: movem.l d3-d4/a2-a4,-(sp)
pea (a0)
move.w #$20,-(sp)
trap #1
addq.l #6,sp
move.l d0,a0
movem.l (sp)+,d3-d4/a2-a4
rts
Fopen: movem.l d3-d4/a2-a4,-(sp)
move.w d0,-(sp)
pea (a0)
move.w #$3d,-(sp)
trap #1
addq.l #8,sp
movem.l (sp)+,d3-d4/a2-a4
rts
Fclose: movem.l d3-d4/a2-a4,-(sp)
move.w d0,-(sp)
move.w #$3e,-(sp)
trap #1
addq.l #4,sp
movem.l (sp)+,d3-d4/a2-a4
rts
Fread: movem.l d3-d4/a2-a4,-(sp)
pea (a0)
move.l d1,-(sp)
move.w d0,-(sp)
move.w #$3f,-(sp)
trap #1
lea $c(sp),sp
movem.l (sp)+,d3-d4/a2-a4
rts
Fwrite: movem.l d3-d4/a2-a4,-(sp)
pea (a0)
move.l d1,-(sp)
move.w d0,-(sp)
move.w #$40,-(sp)
trap #1
lea $c(sp),sp
movem.l (sp)+,d3-d4/a2-a4
rts
Fseek: movem.l d3-d4/a2-a4,-(sp)
move.w d2,-(sp)
move.w d1,-(sp)
move.l d0,-(sp)
move.w #$42,-(sp)
trap #1
lea $a(sp),sp
movem.l (sp)+,d3-d4/a2-a4
rts
Malloc: movem.l d3-d4/a2-a4,-(sp)
move.l d0,-(sp)
move.w #$48,-(sp)
trap #1
addq.l #6,sp
move.l d0,a0
movem.l (sp)+,d3-d4/a2-a4
rts
Mfree: movem.l d3-d4/a2-a4,-(sp)
move.l a0,-(sp)
move.w #$49,-(sp)
trap #1
addq.l #6,sp
movem.l (sp)+,d3-d4/a2-a4
rts
end