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