home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
DRI-archive
/
roche
/
SCB.BAS
< prev
next >
Wrap
BASIC Source File
|
2009-12-11
|
10KB
|
246 lines
10 REM SCB.BAS by Emmanuel ROCHE
20 '
30 hc$ = "N" ' Default = no HardCopy (hc$)
40 PRINT
50 INPUT "SCB: Do you want a hardcopy (Y/N) : " ; hc$
60 hc$ = UPPER$ (hc$)
70 '
80 IF CHR$ (PEEK (&H151) ) = "2" THEN mallard = 2 : GOTO 160 ' Version 1.29
90 IF CHR$ (PEEK (&H151) ) = "3" THEN mallard = 3 : GOTO 160 ' Version 1.39
100 '
110 PRINT
120 PRINT CHR$ (7) ; "Bad version of Mallard-80 BASIC"
130 PRINT
140 END
150 '
160 IF hc$ = "Y" AND mallard = 2 THEN POKE 8792,205
170 IF hc$ = "Y" AND mallard = 3 THEN POKE 29161,205
180 '
190 '-----------------------------------
200 '
210 GOTO 310 ' Press RETURN to Continue
220 '
230 IF hc$ = "Y" THEN GOTO 290
240 PRINT
250 PRINT "Press RETURN to Continue " ;
260 ret$ = INKEY$ : IF ret$ = "" THEN GOTO 260
270 PRINT
280 PRINT
290 RETURN
300 '
310 GOTO 390 ' Address, then address (inverted)
320 '
330 PRINT RIGHT$ ("0000" + HEX$ (x), 5) ; "H: " ;
340 IF PEEK (x + 1) > &H9F THEN PRINT "0" ; ELSE PRINT " " ;
350 PRINT RIGHT$ ("0" + HEX$ (PEEK (x + 1) ), 2) ;
360 PRINT RIGHT$ ("0" + HEX$ (PEEK (x) ), 2) ; "H " ;
370 RETURN
380 '
390 GOTO 460 ' Address, then byte
400 '
410 PRINT RIGHT$ ("0000" + HEX$ (x), 5) ; "H: " ;
420 IF PEEK (x) > &H9F THEN PRINT "0" ; ELSE PRINT " " ;
430 PRINT RIGHT$ ("0" + HEX$ (PEEK (x) ), 2) ; "H " ;
440 RETURN
450 '
460 GOTO 710 ' Address, then address (inverted), then binary of address
470 '
480 GOSUB 330 ' Address, then address (inverted)
490 a = PEEK (x + 1)
500 GOSUB 570 ' Decimal --> binary conversion
510 PRINT RIGHT$ ("0000000" + bina$, 8) ;
520 a = PEEK (x)
530 GOSUB 570 ' Decimal --> binary conversion
540 PRINT RIGHT$ ("0000000" + bina$, 8) ; "B " ;
550 RETURN
560 '
570 REM Binary subroutine
580 '
590 bina$ = ""
600 b$ = "01"
610 xx = 0
620 bb = a
630 cc = bb / 2
640 IF cc < 1 THEN xx = 1
650 cc = (cc - INT (bb / 2) ) * 2
660 bina$ = MID$ (b$, cc + 1, 1) + bina$
670 IF xx = 1 THEN RETURN
680 bb = INT (bb / 2)
690 GOTO 630
700 '
710 GOTO 800 ' Drive search chain subroutine
720 '
730 IF PEEK (x) = &HFF THEN PRINT "End of search chain )" ; : GOTO 760
740 IF PEEK (x) = &H0 THEN PRINT "Default drive )" ; : GOTO 760
750 PRINT CHR$ (&H40 + PEEK (x) ) ; " )" ;
760 RETURN
770 '
780 '---------------------------
790 '
800 DEF FN deek (x) = PEEK (x) + 256 * PEEK (x + 1)
810 '
820 scb = FN deek (1) - 103 ' 100 bytes before the BIOS
830 '
840 PRINT
850 PRINT "System Control Block"
860 PRINT "--------------------"
870 PRINT
880 '
890 x = scb + &H0 : GOSUB 410 : PRINT "RO ???"
900 x = scb + &H1 : GOSUB 410 : PRINT "RO ???"
910 x = scb + &H2 : GOSUB 410 : PRINT "RO ???"
920 x = scb + &H3 : GOSUB 410 : PRINT "RO ???"
930 x = scb + &H4 : GOSUB 410 : PRINT "RO ???"
940 x = scb + &H5 : GOSUB 410 : PRINT "RO BDOS Version Number."
950 x = scb + &H6 : GOSUB 410 : PRINT "RW Reserved for user use."
960 x = scb + &H7 : GOSUB 410 : PRINT "RW (Use these four bytes"
970 x = scb + &H8 : GOSUB 410 : PRINT "RW for your own flags"
980 x = scb + &H9 : GOSUB 410 : PRINT "RW and data.)"
990 x = scb + &HA : GOSUB 410 : PRINT "RO ???"
1000 x = scb + &HB : GOSUB 410 : PRINT "RO ???"
1010 x = scb + &HC : GOSUB 410 : PRINT "RO ???"
1020 x = scb + &HD : GOSUB 410 : PRINT "RO ???"
1030 x = scb + &HE : GOSUB 410 : PRINT "RO ???"
1040 x = scb + &HF : GOSUB 410 : PRINT "RO SUBMIT drive. ( " ; : GOSUB 740
: PRINT
1050 x = scb + &H10 : GOSUB 330 : PRINT "RW Program Error Return Code. " ;
1060 code = FN deek (x)
1070 IF code = &H0 THEN PRINT "(CCP loaded the program.)"
1080 IF (code > &H0) AND (code < &HFF00) THEN PRINT "(Successful return)"
1090 IF (code > &HFEFF) AND (code < &HFF80) THEN PRINT "(Unsuccessful
return)"
1100 IF (code > &HFF7F) AND (code < &HFFFD) THEN PRINT "(Reserved)"
1110 IF code = &HFFFD THEN PRINT "(Fatal BDOS error.)"
1120 IF code = &HFFFE THEN PRINT "(The user typed a CTRL-C.)"
1130 '
1140 GOSUB 230 ' Press RETURN to Continue
1150 '
1160 x = scb + &H12 : GOSUB 410 : PRINT "RO Page address of multiple line
RSX."
1170 x = scb + &H13 : GOSUB 410 : PRINT "RO CCP Default Disk. ( " ; CHR$
(&H41 + PEEK (x) ) ; " )"
1180 x = scb + &H14 : GOSUB 410 : PRINT "RO CCP Default User. (" ; PEEK (x)
; ")"
1190 x = scb + &H15 : GOSUB 330 : PRINT "RO Pointer to multiple line in
RSX."
1200 x = scb + &H17 : GOSUB 410 : GOSUB 520 : PRINT "RO BDOS-CCP Flags."
1210 x = scb + &H18 : GOSUB 410 : GOSUB 520 : PRINT "RO BDOS-CCP Flags."
1220 x = scb + &H19 : GOSUB 410 : GOSUB 520 : PRINT "RO BDOS-CCP Flags."
1230 x = scb + &H1A : GOSUB 410 : PRINT "RW Console Width. (" ; PEEK (x) + 1
; "columns )"
1240 x = scb + &H1B : GOSUB 410 : PRINT "RO Console Column Position. (" ;
PEEK (x) ; ")"
1250 x = scb + &H1C : GOSUB 410 : PRINT "RW Console Page Length. (" ; PEEK
(x) ; "lines )"
1260 x = scb + &H1D : GOSUB 410 : PRINT "RO ???"
1270 x = scb + &H1E : GOSUB 330 : PRINT "RO Pointer to first command line
text."
1280 x = scb + &H20 : GOSUB 330 : PRINT "RO Pointer to second command line
text."
1290 x = scb + &H22 : GOSUB 480 : PRINT "RW CONIN Redirection Vector.
(@CIVEC)"
1300 x = scb + &H24 : GOSUB 480 : PRINT "RW CONOUT Redirection Vector.
(@COVEC)"
1310 x = scb + &H26 : GOSUB 480 : PRINT "RW AUXIN Redirection Vector.
(@AIVEC)"
1320 x = scb + &H28 : GOSUB 480 : PRINT "RW AUXOUT Redirection Vector.
(@AOVEC)"
1330 x = scb + &H2A : GOSUB 480 : PRINT "RW LSTOUT Redirection Vector.
(@LOVEC)"
1340 '
1350 GOSUB 230 ' Press RETURN to Continue
1360 '
1370 x = scb + &H2C : GOSUB 410 : PRINT "RW Page Mode. " ;
1380 IF PEEK (x) = &H0 THEN PRINT "(One page at a time)" ELSE PRINT "(Use
CTRL-S/CTRL-Q)"
1390 x = scb + &H2D : GOSUB 410 : PRINT "RO ???"
1400 x = scb + &H2E : GOSUB 410 : PRINT "RW " ;
1410 IF PEEK (x) = &H0 THEN PRINT "CTRL-H is a backspace character
(moves back and deletes)."
1420 IF PEEK (x) = &HFF THEN PRINT "CTRL-H is a rub/del character
(echoes the deleted character)."
1430 x = scb + &H2F : GOSUB 410 : PRINT "RW " ;
1440 IF PEEK (x) = &H0 THEN PRINT "rub/del echoes the deleted character."
1450 IF PEEK (x) = &HFF THEN PRINT "rub/del is interpreted as a CTRL-H
(moves back and deletes)."
1460 x = scb + &H30 : GOSUB 410 : PRINT "RO SUBMIT mode keyboard status?"
1470 x = scb + &H31 : GOSUB 410 : PRINT "RO ???"
1480 x = scb + &H32 : GOSUB 410 : PRINT "RO ???"
1490 x = scb + &H33 : GOSUB 480 : PRINT "RW Console Mode."
1500 x = scb + &H35 : GOSUB 330 : PRINT "RO Address of BD0S 128-byte buffer.
(@BNKBF)"
1510 x = scb + &H37 : GOSUB 410 : PRINT "RW Output Delimiter Character. " ;
1520 IF (PEEK (x) < &H20) OR (PEEK (x) > &H7E) THEN PRINT ELSE PRINT "( " ;
CHR$ (PEEK (x) ) ; " )"
1530 x = scb + &H38 : GOSUB 410 : PRINT "RW List Output Flag. " ;
1540 IF PEEK (x) = &H0 THEN PRINT "(No printer echo)" : GOTO 1570
1550 IF PEEK (x) = &H1 THEN PRINT "(Printer echo)" : GOTO 1570
1560 PRINT CHR$ (7) ; "ERROR: Bad byte value !!!"
1570 x = scb + &H39 : GOSUB 410 : PRINT "RO Keyboard lock byte?"
1580 x = scb + &H3A : GOSUB 330 : PRINT "RO Address of System Control
Block."
1590 x = scb + &H3C : GOSUB 330 : PRINT "RO Current DMA Address. (@CRDMA)"
1600 x = scb + &H3E : GOSUB 410 : PRINT "RO Current Disk. ( " ; CHR$ (&H41 +
PEEK (x) ) ; " ) (@CRDSK)"
1610 x = scb + &H3F : GOSUB 330 : PRINT "RO Pointer to FCB in use by BDOS.
(@VINFO)"
1620 x = scb + &H41 : GOSUB 410 : PRINT "RO (Flag to above pointer)
(@RESEL)"
1630 x = scb + &H42 : GOSUB 410 : PRINT "RO BDOS function number (" ; PEEK
(x) ; ") at last disk error."
1640 x = scb + &H43 : GOSUB 410 : PRINT "RO BDOS function number (" ; PEEK
(x) ; ") for error message. (@FX)"
1650 '
1660 GOSUB 230 ' Press RETURN to Continue
1670 '
1680 x = scb + &H44 : GOSUB 410 : PRINT "RO Current User Number. (" ; PEEK
(x) ; ") (@USRCD)"
1690 x = scb + &H45 : GOSUB 330 : PRINT "RO Main file position entry
storage?"
1700 x = scb + &H47 : GOSUB 330 : PRINT "RO ???"
1710 x = scb + &H49 : GOSUB 410 : PRINT "RO ???"
1720 x = scb + &H4A : GOSUB 410 : PRINT "RW BDOS Multi-Sector Count. (" ;
PEEK (x) ; ") (@MLTIO)"
1730 x = scb + &H4B : GOSUB 410 : PRINT "RW BDOS Error Mode. ( " ;
1740 IF PEEK (x) = &HFF THEN PRINT "Return Error mode )" ;
1750 IF PEEK (x) = &HFE THEN PRINT "Return and Display mode )" ;
1760 PRINT "Default mode )" ;
1770 PRINT " (@ERMDE)"
1780 x = scb + &H4C : GOSUB 410 : PRINT "RW Drive Search Chain. ( " ; :
GOSUB 730 : PRINT
1790 x = scb + &H4D : GOSUB 410 : PRINT "RW ( " ; : GOSUB 730 : PRINT
1800 x = scb + &H4E : GOSUB 410 : PRINT "RW ( " ; : GOSUB 730 : PRINT
1810 x = scb + &H4F : GOSUB 410 : PRINT "RW ( " ; : GOSUB 730 : PRINT
1820 x = scb + &H50 : GOSUB 410 : PRINT "RW Temporary File Drive. ( " ; :
GOSUB 730 : PRINT
1830 x = scb + &H51 : GOSUB 410 : PRINT "RO Error Drive. ( " ; : GOSUB 730 :
PRINT " (@ERDSK)"
1840 x = scb + &H52 : GOSUB 410 : PRINT "RO ???"
1850 x = scb + &H53 : GOSUB 410 : PRINT "RO ???"
1860 x = scb + &H54 : GOSUB 410 : PRINT "RO Open drive door flag. (@MEDIA)"
1870 x = scb + &H55 : GOSUB 410 : PRINT "RO ???"
1880 x = scb + &H56 : GOSUB 410 : PRINT "RO ???"
1890 x = scb + &H57 : GOSUB 410 : GOSUB 520 : PRINT "RO BDOS Flags.
(@BFLGS)"
1900 '
1910 GOSUB 230 ' Press RETURN to Continue
1920 '
1930 x = scb + &H58 : GOSUB 330 : PRINT "RW Date in days since 1 Jan 78.
(@DATE)"
1940 x = scb + &H5A : GOSUB 410 : PRINT "RW Hours in BCD. (@HOUR)"
1950 x = scb + &H5B : GOSUB 410 : PRINT "RW Minutes in BCD. (@MIN)"
1960 x = scb + &H5C : GOSUB 410 : PRINT "RW Seconds in BCD. (@SEC)"
1970 x = scb + &H5D : GOSUB 330 : PRINT "RO Common Memory Base Address."
1980 x = scb + &H5F : GOSUB 410 : PRINT "RO Error message jump." ;
1990 IF PEEK (x) = &HC3 THEN PRINT " ( JUMP " ; : x = scb + &H60 : GOSUB
340 : PRINT ")" ; " (?ERJMP)" ELSE PRINT
2000 x = scb + &H60 : GOSUB 330 : PRINT "RO (Cf. above)"
2010 x = scb + &H62 : GOSUB 330 : PRINT "RO Address of current top of User
TPA. (@MXTPA)"
2020 PRINT
2030 '
2040 IF hc$ = "Y" AND mallard = 2 THEN POKE 8792,195
2050 IF hc$ = "Y" AND mallard = 3 THEN POKE 29161,195
2060 '
2070 END