public ?mltio,?flush,?mov,?tim,?bnksl,?stbnk,?xmov\r
\r
extrn bs$stack\r
- extrn _b0call\r
+ extrn _b0hlcall\r
\r
\r
; BIOS Jump vector.\r
?ioctl jp ioctl ;\r
\r
\r
- rept 48\r
+ rept 32\r
db '|'\r
endm\r
boot$stack:\r
out0 (cbr),a\r
ld a,USR$CBAR\r
out0 (cbar),a\r
- ld sp,boot$stack\r
+ ld sp,bs$stack\r
\r
call hwinit ; first time hardware initialisation\r
\r
cseg ; following in resident memory\r
\r
boot$1:\r
+ ld sp,boot$stack\r
call set$jumps\r
call ?ldccp ; fetch CCP for first time\r
jp ccp\r
ld a,(hl)\r
ld (@RDRV),a\r
jr nz,notfirst ; examine login bit\r
- ld hl,-6\r
+\r
+ ld hl,-6 ; call LOGIN\r
add hl,de\r
ld a,(hl)\r
inc hl\r
ld h,(hl)\r
ld l,a\r
- ld (bs$stack),sp\r
- ld sp,bs$stack\r
- call ijphl ; call LOGIN\r
- ld sp,(bs$stack)\r
+ call _b0hlcall\r
+\r
notfirst:\r
ld hl,(@xdph) ; recover DPH pointer\r
ret\r
; extended disk parameter header (XDPH).\r
\r
read:\r
- ld (bs$stack),sp\r
- ld sp,bs$stack\r
ld a,1\r
ld (@op),a\r
ld ix,(@xdph) ; get drive descriptor pointer\r
ld l,(ix-8) ; get read routine entry\r
ld h,(ix-7)\r
- call ijphl ; call LOGIN\r
- ld sp,(bs$stack)\r
+\r
+ call _b0hlcall\r
ret\r
\r
; WRITE\r
; extended disk parameter header (XDPH).\r
\r
write:\r
- ld (bs$stack),sp\r
- ld sp,bs$stack\r
ld a,2\r
ld (@op),a\r
ld ix,(@xdph) ; get drive descriptor pointer\r
ld l,(ix-10) ; get write routine entry\r
ld h,(ix- 9)\r
- call ijphl ; call LOGIN\r
- ld sp,(bs$stack)\r
+\r
+ call _b0hlcall\r
ret\r
\r
\r
; Trampoline for routines in banked ram.\r
; Switch stack pointer to "system" stack in top ram\r
; Save cbar\r
+;\r
+; HL: function pointer\r
;\r
cseg ; common!\r
\r
- public _b0call\r
-\r
- if 0\r
-\r
-_b0call:\r
- push af\r
- in0 a,(bbr)\r
- jr nz,b0c_doit\r
- pop af\r
-\r
- ex (sp),hl ;16\r
- push de\r
- ld e,(hl)\r
- inc hl\r
- ld d,(hl)\r
- inc hl\r
- ld (b0c_fast_go),de\r
- pop de\r
- ex (sp),hl ;16\r
-b0c_fast_go equ $+1\r
- jp 0\r
-\r
-b0c_doit:\r
- ld (b0_save_hl),hl\r
- ld (b0_save_de),de\r
- pop hl\r
- ld (b0_save_af),hl\r
-\r
- pop de ;get ptr to 'function address' in de\r
- ld hl,2\r
- add hl,de\r
- push hl ;put return address on stack\r
-\r
- if 0 ; link80\r
-\r
- ld hl,0\r
- add hl,sp ;\r
- ld a,h\r
- cp high (bs$stack-bs$stack$size) ;link80 can't process this\r
- jr nc,$ + 5 ;skip if stack allready in common bios ram\r
-\r
- else\r
-\r
- ld hl,bs$stack-bs$stack$size\r
- ld a,h\r
- dec a\r
- ld hl,0\r
- add hl,sp ;\r
- cp h\r
- jr c,$ + 5 ;skip if stack allready in common bios ram\r
- endif\r
- ld sp,bs$stack ;\r
-\r
- push hl ;save user stack pointer\r
-\r
- in0 h,(bbr) ;\r
- push hl ;\r
- ld hl,b0c_ret\r
- push hl\r
- xor a\r
- out0 (bbr),a ;\r
- ex de,hl ;ptr\r
- ld e,(hl) ;get 'function address'\r
- inc hl ;\r
- ld d,(hl) ;\r
- push de ;put on (switched) stack\r
-\r
- ld hl,(b0_save_af) ;get back users registers\r
- push hl\r
- pop af\r
- ld de,(b0_save_de)\r
- ld hl,(b0_save_hl)\r
- ret ;go to function\r
-b0c_ret:\r
- ld (b0_save_hl),hl\r
-\r
- pop hl ;\r
- out0 (bbr),h ;\r
- pop hl ;\r
- ld sp,hl ;\r
- ld hl,(b0_save_hl)\r
- ret ;\r
- else\r
-\r
-_b0call:\r
- push af\r
- ld (b0_save_hl),hl\r
- ld (b0_save_de),de\r
- pop hl\r
- ld (b0_save_af),hl\r
-\r
- pop de ;get ptr to 'function address' in de\r
- ld hl,2\r
- add hl,de\r
- push hl ;put return address on stack\r
-\r
- if 0 ; link80\r
-\r
- ld hl,0\r
- add hl,sp ;\r
- ld a,h\r
- cp high (bs$stack-bs$stack$size) ;link80 can't process this\r
- jr nc,$ + 5 ;skip if stack allready in common bios ram\r
-\r
- else\r
+ public _b0hlcall\r
+_b0hlcall:\r
+ ld (b0_save_r),hl\r
\r
ld hl,bs$stack-bs$stack$size\r
ld a,h\r
add hl,sp ;\r
cp h\r
jr c,$ + 5 ;skip if stack allready in common bios ram\r
- endif\r
ld sp,bs$stack ;\r
\r
push hl ;save user stack pointer\r
\r
in0 h,(bbr) ;\r
push hl ;\r
- ld hl,b0c_ret\r
+ ld hl,b0hlc_ret\r
push hl\r
xor a\r
out0 (bbr),a ;\r
- ex de,hl ;ptr\r
- ld e,(hl) ;get 'function address'\r
- inc hl ;\r
- ld d,(hl) ;\r
- push de ;put on (switched) stack\r
-\r
- ld hl,(b0_save_af) ;get back users registers\r
- push hl\r
- pop af\r
- ld de,(b0_save_de)\r
- ld hl,(b0_save_hl)\r
- ret ;go to function\r
-b0c_ret:\r
- ld (b0_save_hl),hl\r
+ ld hl,(b0_save_r)\r
+ jp (hl)\r
+b0hlc_ret:\r
+ ld (b0_save_r),hl\r
\r
pop hl ;\r
out0 (bbr),h ;\r
pop hl ;\r
ld sp,hl ;\r
- ld hl,(b0_save_hl)\r
+ ld hl,(b0_save_r)\r
ret ;\r
- endif\r
\r
-b0_save_hl: dw 0\r
-b0_save_de: dw 0\r
-b0_save_af: dw 0\r
\r
+b0_save_r: dw 0\r
\r
;--------------------------------------------------------------------\r
; Trampoline for interrupt routines in banked ram.\r