10
20
30 :
40 OSWRCH=&FFEE:OSNEWL=&FFE7:OSASCI=&FFE3:OSFILE=&FFDD
50 DIM mcode% &1000
60 FOR P=0 TO 1
70 P%=&8000:O%=mcode%
80 [OPT P*3+4
90 BRK:BRK:BRK:JMP Service
100 EQUB &82:EQUB Copy-&8000
110 EQUB &00:EQUS "TESTROM"
120 .Copy
130 EQUB &00:EQUS "(C)"
140 EQUB &00
150 :
160 .Service
170 PHA:LDA &DF0,X :\ Get workspace flags
180 BMI P%+4:EOR #&40 :\ Toggle bit 6 if bit 7 is zero
190 ASL A:BPL ServDisabled:PLA :\ Exit if the resultant bit 6 is clear
200 :
210 \ Do the service call dispatch
220 CMP #&24:BEQ Serv24 :\ How much high w/s needed
230 CMP #&22:BEQ Serv22 :\ Claim high workspace
240 CMP #&02:BEQ Serv02 :\ Claim low workspace
250 :
260 CMP #&09:BEQ Serv09 :\ Test code
270 RTS
280 :
290 .ServDisabled
300 PLA:RTS :\ Restore service call and return
310
320
330 \ -----------------------------------------------------------
340 \ SERVICE &24 - State how much private Hazel workspace needed
350 \ -----------------------------------------------------------
360 .Serv24
370 DEY:RTS :\ Need one page of private workspace
380 :
390 \ -------------------------------------------
400 \ SERVICE &22 - Claim Hazel private workspace
410 \ -------------------------------------------
420 .Serv22
430 CPY #&DC:BCC P%+4:LDY #&DC :\ If run out of Hazel, point to top of Hazel
440 TYA:STA &DF0,X :\ Note location of private workspace
450 INY:LDA #&22:RTS :\ Claim one page of workspace and return
460 :
470 \ ---------------------------------------
480 \ SERVICE 2 - Claim private low workspace
490 \ ---------------------------------------
500 .Serv02
510 LDA OSFILE:CMP #&6C:BCS Serv2bbc :\ Always claim low workspace on BBC
520 LDA &DF0,X :\ Get workspace pointer
530 CMP #&DC:BCC Serv2done :\ If we haven't run out of Hazel, use it
540 .Serv2bbc
550 TYA:STA &DF0,X :\ Note location of private workspace
560 INY :\ Use one page of low workspace
570 .Serv2done
580 \ ROMs often do Break initialisation here
590 LDA #2:RTS :\ Restore and exit
600 :
610 \ Test code, display something with *HELP
620 .Serv09
630 LDX #0
640 .Serv09lp
650 LDA Serv09Text,X:BEQ Serv09b
660 JSR OSASCI:INX:BNE Serv09lp
670 .Serv09b
680 LDX &F4:LDA &DF0,X:JSR PrHex
690 LDA #ASC"0":JSR OSWRCH:JSR OSWRCH
700 JSR OSNEWL
710 LDA #9:RTS
720 .Serv09Text
730 EQUB 13:EQUS "Workspace at &":EQUB 0
740 .PrHex
750 PHA:LSR A:LSR A:LSR A:LSR A:JSR PrNyb:PLA
760 .PrNyb
770 AND #15:CMP #10:BCC P%+4:ADC #6:ADC #48:JMP OSWRCH
780 :
790 \ Set (ws) to point to my workspace
800 .FindWS
810 LDX &F4:LDA &DF0,X:STA ws+1:LDA #0:STA ws+0:RTS
820 ]NEXT
830 PRINT"*SAVE HIGHROM ";~mcode%;" ";~O%