Monitor_11_Listing_Sep82 Monitor 11 Listing Sep82
Monitor_11_Listing_Sep82 Monitor_11_Listing_Sep82
User Manual: Monitor_11_Listing_Sep82
Open the PDF directly: View PDF .
Page Count: 104
Download | |
Open PDF In Browser | View PDF |
28 Sep 82 PAGE 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, OOOOr 0000, OOOOr 0000, 0000, 0000, 0000, 0000, 0000, DODO' 0000, 0000, 0000, 0000, 0000, DODO' 0000, OOOOr OOOOr DODO' 0000, 0000, 0000, 0000, OOOOr OOOOr OOOOr 0000, 0000, 00001 00001 OOOOr 00001 OOOOr 000 Or 00001 00001 0000, 00001 PAGE 0000, 00001. 00001 00001 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 00001 0000, 0000, 0000, 0000, 0000, PAGE 0000, 0000, 0000, 0000, 0000, 0000, 0000, 00001 00001 0000, 0000, 0000, 0000, TPR: MaNU. TEXT a FILENAME: MONITOR ;---------------.~------------------------------------ ----------------- MACHINE CODE MONITOR FOR MOTOROLA 68000 Written b~ Rich Page June 7, 1982 i---------------------------------------------------------------------Register Allocation A7 A6 AS stack pointer local pointer global pointer A4 A3-AO scratch 07-00 scratch ;---------------------------------------------------------------------Layout of low memory , From To Description 0000 0100 0200 0400 0800 OAOO OCxx 0000 OEOO OFOO 1000 1800 3000 DOFF 0147 03FF 07FF 09FF OBFF OCFF OOxx OEFF OFFF 17FF 2FFF Exception Vectors Memory Configuration Map Free space for user asm lang globels Macsbug.globals Mapped to FAOOOO for ORIVERS.OBJ Free System Globa Is Syscom, mhe info Strbuf Save Area for Zero Page Data Area for DRIVERS.OBJ User Jump Table Heap Bottom ;---------------------------------------------------------------------Memory Configuration Map $100 $104 $108 $10C $UO $U4 $118 $UC ; $120 FILE: MONITOR. TEXT $124 $128 $12C $130 $134 $138 '13C $140 $144 $148 $14C $150 $154 $158 $15C Ptr to Monitor Bottom (~lso base of the unit table) Ptr to Monitor Top unused for now Ptr to Bottom of Code Steck Screen Base Memory Top Port to the Apple UART for Macsbug Ptr to Macsbug Jump Table Ptr Ptr Ptr Ptr Ptr to to to to to GOTOXY routine SOROC driver Default Soft Break Point Table UART dr hie,. built.in parallelport Start ClT~tn.~~h.ap·~ .........~ Start of the ~taek Ptr to us.ars. last AS Ptr to MEMORY~ ({e. dev ice #4: ) Ptr to Twiggy Driver. RECORD MACHINE,FREE2.FREE3, FREE4: BYTE END Ptr to debug card Ptr to loader for intrinsic units Ptr to four port card. Ptr to ext~rnal r~l. ~ystem Definition of $14C MACHINE O=LI SA, 1 =LI TTLE ;-----------------------------------~~---------------- ----------------- , 2 MONITOR FILE: MONITOR. TEXT . PROC , 0000 0000 , 0000 0000 0000 0000 0000 0000 0001 0002 0003 0004 mise equates NIL ; ; MONITOR, 0 EQU a iorslt word equates INOERR IBADBLK IBAOUNT IBADMOD ITIMOUT EQU EQU EQU EQU EQU 0 1 2 3 4 matches Feb 1981 compiler (and beyond) Page 001 28 Sep 82 00001 00001 DODO' 0000, DODO' 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 00001 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, DODO' 0000, 0000, 00001 0000, 0000, 0000, 00001 0000, 0000, 00001 0000, 0000, 0000, 0000, 00001 PAGE 0000, 00001 00001 0000, 0000, 0000, 00001 00001 00001 00001 00001 00001 0000, 0000, 0000, 00001 00001 0000, 0000, 0000, 0000, 00001 0000, 0000, DODO' DODO' 0000, 00001 00001 0000, 0000, 0000, 0000, 0000, 0000, 0000, 00001 00001 00001 0000, 0000, 0000, 0000, 0000, 0000, 00001 0000, 0000, 00001 0000, DODO' 00001 0000 01000 01000 01000 0000 0000 0000 0000 0000 0000 01000 TPR:MONll.TEXT 0005 0006 0007 0008 0009 OOOA OOOB OOOC 0000 OOOE OOOF ILSTUNT ILSTFIL IBAOTTL INOROOM INOUNIT INOFILE IOUPFIL INOTCLS INOTOPN IBAOFMT ISTROVF , i , 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0002 0004 0006 0008 OOOA 0011 0012 0013 0016 ODIE 001F 0020 0021 0022 0023 0024 0025 0026 0027 0028 002C 0000 0000 3 MONITOR 0000 0000 0000 0000 0000 0000 0000 0000 0001 0002 0003 0004 0005 0006 0007 0008 0000 0000 0000 0000 0000 0040 0312 0200 0800 0002 XOSKFILE COOEFILE TEXTFILE INFOFILE OATAFILE GRAFFILE FOTOFILE SECUROIR · · 0000 0000 0000 0000 0000 0006 OOOE 0010 0012 0014 0000 0000 0000 0000 0006 0016 0018 001A 9 10 11 12 13 14 15 a IORSLT+1 SYSUNT+l HITIME+2 LOTIME+2 MSCNFO+2 CRTTYP+2 CRTESC+7 FILCNT+l CLRSCRN+1 CLRLINE+3 CRTINFO+8 FLUSH+l EOF+l SSTOP+l BREAK+l BAOCHR+l CHROEL+l ALTMOO+l LINOEL+l ETX+1 PREFIX+l ALPHLCK+4 EQU EQU EQU EQU EQU EQU EQU EQU a 1 2 3 4 5 6 7 8 directory equates MAXOIR MAXOIRB FBLKSIZ OIRSZ OIROISK i i i 8 filekind equates UNTYPFL EQU FILE: MONITOR. TEXT i 0000 0000 0000 0002 0000 0004 EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU , · 5 6 7 syscom definition IORSLT SYSUNT HITIME LOTIME MSCNFO CRTTYP CRTESC FILCNT CLRSCRN CLRLINE CRTINFO FLUSH EOF SSTOP BREAK BAOCHR CHROEL ALTMOO LINOEL ETX PREFIX ALPHLCK SYSCMSZ i - EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU Pag. 002 EQU EQU EQU EQU EQU 77 786 512 4"'FBLKSIZ 2 max number of entries in 4 blocks max number of entries in 40 blocks length of dir block address of directory directory entry equates FSTBLK EQU LSTBLK EQU FKINO EQU ; case fkind OVID EQU OEOVBLK EQU ONUMFLS EQU OLOAOTM EQU OLASTBT EQU , case fkind OTIO EQU LSTBYTE EOU OACCESS EQU OELENG EOU , a i dir entry for OFIRSTBLK ; dir entry for OLSTBLK • d ir entry for file kind, status securdir or untypedfile 6 dir entry for title field 14 dir entry for end of volume field 16 dir entry for number files 18 20 most recent date setting norma I files 6 dir entry for title field 22 dir entry for lastbyte 24 dir entry for date 26 length in bytes of dir entry 2 4 ; close types ; 0000 0000 0000 0000 0000 0001 0002 0003 CNORMAL CLOCK CPURGE CCRUNCH . EQU EQU EQU EQU a 1 2 3 ; FIB -- file buffer equates ; 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0004 0005 0006 0008 OOOA OOOB OOOC OOOE FWINOOW FEOLN FE OF FSTATE FRECSZ FISOPEN FISBLKO FUNIT FMACHIN EQU EOU EQU EQU EQU EQU EQU EQU EQU a FWINOOW+4 FEOLN+l FEOF+1 FSTATE+2 FRECSZ+2 FISOPEN+1 FISBLKO+l FUNIT+2 ) 28 Sep 82 00001 00001 00001 PAGE 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 .00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 PAGE 00001 00001 00001 00001 00001 00001 0000, 0000, 00001 00001 00001 00001 00001 00001 00001 00001 0000, 00001 0000, 0000, 0000, 00001 00001 00001 00001 0000, 00001 00001 00001 00001 0000, 00001 TPR: MON1!. TEXT 0000 0016 0000 0018 0000 001A 4 MONITOR 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 F'MAXBLK EQU F'NXTBLK EQU F'REPCNT EQU F'ILE:MONITOR.TEXT F'MOOIF'O F'HEAOER F'SOF'TBF' F'MAXBYT F'NXTBYT F'BF'CHNG F'OEVVIO F'BUF'F'ER F'IBSZ F'I BS I ZE 001C 001E 0038 003A 003C 003E 0040 0050 0050 0250 i i F'HACHIN+8 F'MAXBLK+2 F'NXTBLK+2 EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU F'REPCNT+2 F'MOOIF'D+2 F'HEADER+DELENG FSOFTBF+2 F'MAXBYT+2 F'NXTBYT+2 FBFCHNG+2 F'DEVVID+16 FBUFFER FBUFFER+FBLKSIZ file table s~stem 0000 0008 · 0000 0001 0000 0002 CONSOLE EQU SYSTERM EQU F'TBLSZ Paga 003 EQU size of s~stem filenames table in b~tes ; un it equates ; 1 2 ; ; UTBL 0000 0000 0000 0000 0000 0000 0000 · MAXU UVID FREEBYT UISBLKD UEOVBLK UTBLSIZ UTABLSZ 0014 0000 0008 0009 OOOA OOOC OOF'C · · entr~ equates EQU EQU EQU EQU EQU EQU EQU 20 a UVIO+8 FREEBYT+l UISBLKD'+l UEOVBLK+2*UTBLSIZ was logged before dev/vol logiC was written ; prefix equates 0000 0000 0000 0000 0000 0000 0000 01000 P RLF' P-NDFS P-ERSEL P-ERSES P-HOME P-BCKSP P-CLRSC P:CLRLN 0000 0001 0002 0003 0004 0005 0006 0007 · .EQU .EQU .EQU .EQU .EQU .EQU .EQU .EQU a 1 2 3 4 5 6 7 ; untttable equates 0000 0000 0000 0000 0000 · INBIT OUTBIT CLRBIT BSYBIT ALLBIT 0001 0002 0004 0008 OOOF' EQU EQU EQU EQU EQU 1 2 4 8 INBIT+OUTBIT+CLRBIT+BSYBIT devices a - 5 MONITOR working device 1 TWigg~ 1 2 TWiggy 2 Bu i I t in para lie I port ; 3 FIL£:MONITOR.TEXT 4 5 6 7 Four Four Four Four port port port port card card card card port a port 1 port 2 port 3 (Marksman only) device table equates ~.;;::..~ 0000 0000 0000 0000 0000 0000 0000 0000 0000 0007 0000 0010 0014 0018 001C 0020 0005 0100 · NOTE: the device table must be a power of 2 bytes per entry MAXDEV DEVNAME DEVBASE DEVMTBL DEVJTBL OEVGLBS ONTRYSZ DEVNSHF DTBLSIZ , EQU EQU EQU EQU EQU EQU EQU EQU EQU 7 a DEVNAME+16 DEVBASE+4 DEVMTBL+4 DEVJTBL+4 DEVGLBS+4 5 sh 1ft count DNTRYSZ* . DNTRYSZ ; LOGN table of logged in units , 0000 0004 0000 0020 LOGENSZ EQU LOGNSZ EQU 4 LOGENSZ* ; ; UT17 table of volume names for devices 1 .. MAXOEV ; 0000 0000 0000 0000 0000 0008 00A8 0498 UT17VID UT17VSZ UT17TSZ UT17SIZ EQU EQU EQU EQU a UT17VID+8 UT17VSZ* UT17TSZ* ; mount table equates 28 Sep 02 00001 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, PAGE TPR: MONII. TEXT 0000 0054 0000 024C MT8LSIZ EQU MT8LSZ5 EQU 4* MT8LSIZ*7 I ; boot device set by CPU rom at boot , 0000 0183 800TOVC EQU S183 ; ; PIA REGISTERS are offsets from S3FF41 (or its equivalent) 0000 0000 0000 0000 0000 0004 0002 0006 · INOATA INCSR OUTOATA OUTCSR , EQU EQU EQU EQU SO S4 S2 S6 ; PIA REGISTERS for corvus/pippin disk interface ; 0000 0000 0000 0000 0000 0000 6 0000, 0000, DODO' 0000, 0000, 00001 0000, DODO' 00001 00001 0000, 0000, DODO' 0000, 0000, 00001 DODO' 0000, 0000, 00001 DODO' DODO' DODO' 0000, DODO' 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0008 0008 0000 0010 0018 MONITOR 0058 0060 0068 0070 0078 0004 0200 0005 DOFF 0009 F'FFF FFFF F'FFF F'FFF FFFC FFFO FFFE FFFF EQU EQU EQU EQU EQU EQU a output regs 8 ORA OR8 SID S18 input regs data direction regs FrLE~MONITOR.TEXT ACR PCR IFR IER NHS CMDSIZE DSK8LK PCMNDSZ BLKSIZE HDRSIZE · EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU S58 S60 S68 S70 $78 au)( control peripheral control int flags int enable reg A no hand shaka number of bytes in cmd string number of bytes in a block bytes-l in pippin cmd string words-l in pippin block words-l in pippin header 4 51.2' 5 255 9 · IOCMD IODRV BLOCKL BLOCKH · EQU EQU EQU EQU -4 -3 -2 -1 ; OFFSET EQUS for pippin read and write routines F"FFF FFFF F'FFF FFFF FFFF FFFF FFFA FFF8 FFFC FFFO FFFE FFFF · PCMND 8LKH 8LKM 8LKL RETRY THRESH , EQU EQU EQU EQU EQU EQU -6 -5 -4 -3 -2 -1 ; globals for the MONITOR , 0000 0800 0000 1800 0000 3000 IN8UFSZ EQU ;IN8UFF EQU UJMPT8L EQU UJMPTOP EQU S800 $1000 S1800 S3000 MACROS FOR ACCESS TO SYSTEM GL08ALS see MONGL8LS.TEXT complete declarations 0000, DODO' 0000, 0000, DODO' DODO' 0000, 0000, DODO' PAGE - OR8 ORA IRA IR8 OOR8 DORA ; OFFSET EQUS for dskread and dskwrt routines 0000, DODO' 0000, DODO' DODO' 0000, DODO' 0000, 0000, 0000, 0000, DODO' 0000, · Page 7 MONITOR SYSCOM: tSYSCOMREC; EMPTYHEAP: tINTEGER; HEAPTOP: tINTEGER; ZFIRST: tINTEGER; INPUTFIB: FIBP; OUTPUTFIB: FI8P; SYSTERM: FIBP; SWAPFI8: FI8P; CODEFI8: FI8P; SYVID: PVID; FREE4A: fINTEGER; DKVID: PVID; FREE4B: tINTEGER; THEDATE: DATEREC; FILLER: STRING[FILLRLN]; UTABLE: TUNITA8L; ; FILETBLP: fFILETA8LE; FILE: MONITOR. TEXT STACKPTR: fINTEGER; INBUFFP: fINTEGER; STR8UF: rSTRING[255]; DBUGFLAG: BOOLEAN; RUNUSER: BOOLEAN; USERFI8: FIBP; ERRP: tINTEGER; UJPT: f INTEGER; UREG: tINTEGER; DREG: tI NTEGER; .MACRO PUTSYSC *POINTER *POINTER *POINTER *POINTER *FILES* ) TO TO TO TO SYSTEM COMM AREA*) EMPTY HEAP TOP*) CURRENT HEAP TOP*) LOADERIUNLOADER*) *SYSUNIT VOLlD*) *USED 8Y MS * ) *DEF AUL T VaLl D* ) *USED 8Y MS * ) *TODAY ... SET IN FILER OR SIGN ON*) *NULLS FOR CARRIAGE DELAY*) *POINTER TO UNIT TABLE FOR VOLUMES*) *POINTER TO TABLE SYSTEM FILENAMES*) *POINTER TO STACK 8ASE*) *POINTER TO USER CODE 8UFFER*) *POINTER TO ASM LANG STRING 8UFFER*) *XEQUTE UNDER DE8UG FLAG*) *USER/SYM DE8UGGER STATUS FLAG*) *POINTER TO USER OBJ FILE BUFFER*) *POINTER SYM DEBUGGER ERROR HANDLER*) *POINTER USERS JUMP TA8LE*} *POINTER REG SAVE AREA FOR USER*) *POINTER REG SAVE AREA FOR DEBUGGER*) ; put into pointer to system comm area 004 28 Sep 82 TPR: MON1!. TEXT Page 005 ,----------------.----------------------------------------------------------------------------------------------------------.~ 0000, 0000, 0000, 0000, 0000, 0000, 0000, 00001 0000, 0000, 0000, 0000, 00001 00001 0000, 0000, 0000, 0000, 0000, 00001 0000, 00001 0000, 0000, 0000, DODO' DODO' DODO' 00001 0000, 00001 0000, 0000, 00001 0000, 0000, 00001 00001 00001 0000, DODO' 00001 00001 PAGE 0000, 00001 00001 0000, 0000, 00001 00001 0000, 0000, 00001 0000, 0000, 0000, DODO' 0000, 0000, 0000, 0000, 0000, 0000, 00001 00001 0000, 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 0000, 00001 00001 00001 00001 00001 00001 00001 0000, 00001 00001 00001 00001 00001 MOVE.L .ENDM %1, -4( AS) . MACRO MOVE.L .ENDM GETSYSC -4(AS),%1 get from pointer to system comm area · MACRO MOVE.L .ENDM PUTEMTH %l,-8(AS) put into empty heap painter . MACRO MOVE.L .ENDM GETEMTH -8(AS),%1 get from empty heap pointer · MACRO LEA .ENDM ADDRNP -12(AS),%1 .pointer to heap top · MACRO MOVE.L .ENDM PUTNP %1, -12( AS) put into painter to heap top · MACRO MOVE.L .ENDM GETNP -12(AS),%1 get from pointer to heap top · MACRO MOVE.L .ENDM PUTZFST %1, -lS( AS) put into load/unload pointer . MACRO MOVE.L .ENDM GETZFST -16(A5),%1 get from load/unload painter · MACRO MOVE.L .ENDM PUTIFIB %1, -20( AS) put into input fib pointer · MACRO MOVE.L .ENDM GETIF'IB -20(A5),%1 get from input fib pointer . MACRO MOVE.L .ENDM PUTOFIB %1, -24( AS) put into uutput fib pointer · MACRO MOVE.L .ENDM GETOFIB -24(A5),%1 get from output fib painter · MACRO MOVE.L .ENDM PUTTFIB %l,-28(AS) put into systerm fib pointer · MACRO MOVE.L .ENDM GETTFIB -28(AS),%1 get from systerm fib pointer . MACRO MOVE.L .ENDM PUTSFIB %1, -32(A5) put into swap fib pointer . MACRO MOVE.L .ENDM GETSF'IB -32(A5 ),%1 get from swap fib pointer . MACRO MOVE.L .ENDM PUTCFIB %1,-36(A5) put into code fib pointer · MACRO MOVE.L .ENDM GETCFIB -36(AS),%1 get from code fib pointer ; 8 MONITOR FILE: MONITOR. TEXT -40 USED BY MS.OBJ FOR CRT INFO . MACRO MOVE.L .ENDM GETSYV -44(A5),%1 get pointer to sysunit valid . MACRO MOVE.L .ENDM PUTSYV %1, -44( A5 ) put pointer to sysunit volid -48 USED BY MS.OBJ FOR UPPER/LOWER TOGGLE, 3 BYTES FREE . MACRO MOVE.L .ENDM GETDKV -S2( A5 ), %1 . MACRO MOVE.L PUTDKV %1, -52( AS) ; get pointer to default va 1 id put pointer to default valid 28 Sep 132 0000, 0000, 0000, 0000, 0000, PAGE - TPR: MONU. TEXT Page 006 .ENDM 9 MONITOR .MACRO LEA .ENDM FILE: MONITOR. TEXT ADDRTHD -S4(AS),%1 pointer to THEDATE word • MACRO LEA .ENDM ADDRFLR -66(AS),%1 pointer to FILLER string • MACRO MOVE.L .ENDM PUTUTBL %l,-70(AS) put • MACRO MOVE.L .ENDM GETUTBL -70(AS),%1 get from unit table painter • MACRO MOVE.L .ENDM PUTSTBL %1, -74(AS) put • MACRO MOVE.L .ENDM GETSTBL -74(AS),%1 get from sys fnames table pOinter • MACRO MOVE.L • ENDM PUTSPTR %1, -78( AS) put into stack painter base • MACRO MOVE.L .ENDM GETSPTR -78(AS},%1 get from stack pointer base • MACRO MOVE.L .ENDM PUTIBF %l,-82(A5} put • MACRO MOVE.L .ENDM GETIBF -S2(A5),%1 get from • MACRO MOVE.L .ENDM PUTSTRB %1, -86(A5) put into string buffer pOinter • MACRO MOVE.L .ENDM GETSTRB -S6(A5), %1 get from string buffer pointer • MACRO MOVE.B .ENDM DBUGSET #l,-87(A5) set debug flag • MACRO MOVE.B .ENDM DBUGCLR #0, -S7(A5) clear debug flag DBUGTST -87(A5 ) test debug flag • MACRO MOVE.B .ENDM RUNUSET #1, -S8(A5) set runuser flag • MACRO MOVE.B · ENDM RUNUCLR #0, -S8(A5) clear runuser flag . MACRO TST.B .ENDM RUNUTST -8S( AS) test runuser flag · MACRO MOVE.L · ENDM PUTUFIB %1, -92( A5) put · MACRO MOVE.L • ENDM GETUFIB -92(AS), %1 get from pointer to user obj fib · MACRO MOVE.L .ENDM PUTERRP %1, -96(A5) put · MACRO MOVE.L · ENDM GETERRP -96(A5), %1 get from pointer to error proc 0000, DODO' 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, DODO' 0000, 0000, 0000, 0000, DODO' 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 00001 DODO' 0000, 0000, 0000, 00001 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, PAGE - 111 MONITOR 00001 0000, 0000, 0000, 0000, 00001 0000, 0000, 0000, 0000, 0000, 0000, 0000, 00001 0000, 0000, 0000, 0000, 0000, 0000, DODO' 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, ._--- ... MACRO TST.B FILE: MONITOR. TEXT into unit table pointer into sys fnames table pOinter into tnbuff pointer inbuff pointer .ENDM into pointer to user obj fib into pOinter to error proc 28 Sep 82 0000, 0000, 00001 0000, 00001 00001 00001 OOOOr 00001 OOOOr OOOOr 00001 0000, 00001 00001 00001 00001 00001 OOOOr 00001 00001 00001 00001 00001 00001 PAGE - 00001 00001 00001 00001 00001 00001 00001 0000, 00001 00001 OOOOr 00001 00001 00001 00001 00001 0000, 00001 00001 00001 00001 00001 00001 00001 OOOOr 00001 00001 00001 0000, 00001 00001 OOOOr 0000, 0000, 0000, 00001 00001 00001 0000, 00001 0000, 00001 OOOOr 00001 00001 OOOOr 00001 00001 OOOOr 00001 00001 00001 00001 00001 0000, PAGE - TPR:MON11.TEXT 11 MONITOR MONIliR 00001 00001 00001 0000, 00001 0000, 00001 00001 00001 00001 '------- • MACRO MOVE.L .ENDM PUTUJPT %1, -100(A5) put into pointer to user JT • MACRO MOVE.L .ENDM GETUJPT -100(A5),%1 get from pointer to user JT • MACRO MOVE.L .ENDM PUTUREG %1, -104( A5 ) put into pointer to user regs • MACRO MOVE.L .ENDM GETUREG -104( A5 ), %1 get from pointer to user regs • MACRO MOVE.L .ENDM PUTDREG %1, -108(A5) put • MACRO MOVE.L • ENDM GET DREG -108(A5),%1 get from pointer to sym debug regs PUTUF"ST put • MACRO F"ILE: MONITOR. TEXT , 12 Page 007 into pOinter to sym debug regs into user load/unload ptr MOVE.L .ENDM %1, -112(A5) • MACRO MOVE.L .ENDM GETUF"ST -112(A5), %l get from user load/unload ptr • MACRO MOVE.L .ENDM PUTACCA %1, -116(A5) put into access record ptr • MACRO MOVE.L .ENDM GETACCA -116(A5), %1 get from access record ptr • MACRO MOVE.L .ENDM PUTDTBL %1, -120( A5) put into device table ptr • MACRO MOVE.L .ENDM GETDTBL -120(A5),%1 get from device table ptr • MACRO MOVE.B .ENDM PUTEBST %1, -121(A5) put into ebstop • MACRO MOVE.B .ENDM GETEBST -121(A5), %1 get from ebstop • MACRO MOVE.B .ENDM PUTNXCH %1, -122(A5) put • MACRO MOVE.B · ENDM GETNXCH -122(A5),%1 get from next exec char • MACRO MOVE.L · ENDM PUTXFIB %1, -126(A5) put into execfile fib . MACRO MOVE.L .ENDM GETXFIB -126 (A5 ), %1 get from execfile fib • MACRO MOVE.W .ENDM PUTDTOW %1, -128(A5) put • MACRO SUB.W .ENOM DECOTOW #1, -128(A5) deer the disk timeout word · MACRO LEA .ENOM ADORSAT -132( A5 ), %1 ptr reg save area top (A3-A4104-07) . MACRO LEA · ENOM AODRSAB -156(A5),%1 ptr reg save area bottom (A3-A4104-07) • MACRO MOVE.L PUTLOGN %1, -160(A5) put into LOGN ptr into next exec char into disk timeout word F"ILE:MONITOR.TEXT 28 Sep 82 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 00001 PAGE 00001 00001 00001 00001 00001 00001 00001 00041 00041 00041 00041 00051 00061 00081 OOOAI OOOCI OOOEI 00121 00161 001AI 001EI 00221 00241 00261 00281 002AI 002CI 002EI 00301 00321 00321 00321 00321 00331 003AI 003C, 003EI 003FI 00461 00481 004AI 004BI 00521 00541 00561 00571 005EI 00601 TPR: MON11. TEXT .ENOM . MACRO MOVE.L .ENDM GETLOGN -160(A5),%1 get from LOGN ptr . MACRO MOVE.L .ENDM PUTUT17 %1, -164(A5) put into UT17 ptr · MACRO MOVE.L . EN OM GETUT17 -164( AS ), %1 get from UT17 ptr · MACRO MOVE.L .ENDM PUTPRNT %1, -168( AS) put ptr to printer driver · MACRO MOVE.L .ENDM GETPRNT -168(AS),%1 get ptr to printer driver · MACRO MOVE.L .ENDM PUTPRBA %1, -172(A5) put ptr to printer driver · MACRO MOVE.L .ENDM GETPRBA -172(A5),%1 get ptr to printer driver Macro TrapTo is used to call the hardware interface routines. Parameter %1 is the magic number aSSOCiated with the routine begin called. ; - · MACRO MOVE.L MOVE.W TRAP MOVE.L .ENDM TRAPTO 07, - (SP) #%1,07 #5 (SP)+,D7 trap to hardware interface save register routine number trap restore register scoo thru SC07 used by IU Trep Handler start of monitor 13 MONITOR RORG FILE: MONITOR. TEXT 0 . INCLUDE MONBEGN.TEXT FILENAME MONBEGN 6000 """** MONBASE BRA ; ; ; 00 05 0000 0000 0000 0003 lE1B OBOC 2AOO 0018 OAOB 0603 1300 3F08 lB7F 0300 0800 0000 0000 5459 0008 004C 0050 OC08 , 00 2.0 20 00 00 0000 07 43 4F 01 00 0000 07 53 59 01 00 0000 00 20 20 00 00 0000 20 20 20 20 20 4E 51 4F 4C 45 53 54 45 52 40 20 20 20 20 20 int ia I va lues for syscom TOPSYSC · BYTE . BYTE · WORD . WORD OFSMISC · WORD · WORD . WORD · WORD . WORD · WORD . WORD . WORD · WORD . WORD . WORD . WORD · WORD . WORD BOTSYSC • WORD ; ; INITIAL a 5 a 0 SOOOD SOO03 SlE1B,S5459 $OBOC,$0008 $2AOO,S004C $0018,$0050 $OAOB,$OC08 S0603 S1300 S3F08 SlB7F S0300 S0800 0 0 IORSLT SYSUNT HITIME LOTIME MSCNFO CRTTYP CRTESC CLRLlNE & CLRSCRN CRTINFO EOF & FLUSH BREAK & SSTOP CHRDEL & BADCHR Ll NOEL & AL TMOD PREFIX & ETX BKSPACE initial values for unit table TOPUTBL · BYTE · ASCI I · BYTE · WORD · BYTE · ASCI I . BYTE . WORD · BYTE · ASCI I · BYTE . WORD . BYTE · ASCI I . BYTE . WORD a unit #0 0,0 0 7 ' CONSOLE' 1,0 unit #1 a 7 'SYSTERM' 1,0 unit #2 0 unit #3 a 0,0 0 28 Sep 82 TPR: MONl L TEXT 00621 00631 006AI 006CI 006EI 006FI 00761 PAGE . BYTE 00 20 20 20 20 20 20 20 · ASCII . BYTE 00 01 0000 . WORD . BYTE 00 20 20 20 20 20 20 20 · ASCI I 00 01 · BYTE - 14 MONITOR FILE: MONBEGN.TEXT 00781 007AI 007BI 00821 00841 00B61 00871 OOBEI 00901 00921 00931 009AI 009CI 009EI 009FI 00A61 OOABI OOAAI OOABI 00B21 00B41 00B61 00B71 OOBEI OOCOI 00C21 00C31 OOCAI OOCCI OOCEI OOCFI 00061 00081 OODAI OODBI 00E21 00E41 OOE61 00E71 OOEEI OOFOI 00F21 00F31 OOFAI OOFC, OOFEI OOFFI 01061 010BI 010AI 010BI 01121 01141 01161 01171 PAGE 0000 07 50 52 00 00 0000 00 20 20 00 00 0000 00 20 20 00 00 0000 00 2.0 20 00 01 0000 00 20 20 00 01 0000 00 20 20 00 01 0000 00 20 20 00 01 0000 00 20 20 00 01 0000 00 20 20 00 01 0000 00 20 20 00 01 0000 010 20 20 00 01 0000 00 20 20 00 01 0000 00 20 20 00 01 0000 00 20 20 - 15 011EI 01201 0122, 01231 012AI 012C, 012EI 01301 01301 0130, 01301 0131, 013BI 013FI 01461 01481 01491 01501 01571 015EI 01601 01611 01681 016FI 01761 01781 01791 01801 · WORD . BYTE 49 4E 54 45 52 · ASCII . BYTE . WORD · BYTE 20 20 20 20 20 · ASCI I · BYTE . WORD · BYTE 20 20 20 20 20 · ASCII . BYTE . WORD . BYTE 20 20 20 20 20 · ASCII · BYTE . WORD • BYTE 20 20 20 20 20 · ASCI I . BYTE . WORD · BYTE 20 20 20 20 29' · ASCII . BYTE -.WORD . BYTE 20 20 20 20 20 · ASCII . BYTE . WORD . BYTE 20 20 20 20 20 • ASCII . BYTE . WORD . BYTE 20 20 20 20 20 • ASCII • BYTE . WORD · BYTE 20 20 20 20 20 · ASCII . BYTE . WORD . BYTE 20 20 20 20 20 · ASCII · BYTE . WORD . BYTE 20 20 20 20 20 · ASCI I · BYTE . WORD · BYTE 20 20 20 20 20 · ASCI I . BYTE . WORD · BYTE 20 20 20 20 20 · ASCI I FILE: MONBEGN.TEXT MONITOR 00 01 0000 00 20 20 20 20 20 20 20 00 01 0000 0000 OE 2A 4C 20 20 00 2A 4S 20 20 OB 2A 2E 20 20 OA 2A 4F" · BYTE • WORD . BYTE • ASCII · BYTE · WORD BOTUTBL . WORD i i i 41 53 53 45 40 42 45 52 2E 4F 42 4A 20 20 20 20 20 20 20 43 4F 40 50 49 4C 52 2E 4F 42 4A 20 20 20 20 20 20 20 20 45 44 49 54 4F 52 4F 42 4A 20 20 20 20 20 20 20 20 20 20 46 49 4C 45 52 2E 42 4A 20 20 20 20 ~"""~""~M_'''_'''''''',",I'''''''''_'~'''''''''''''''''''''''''' _ _ _ 0 i unit #4 0,1 a 0 unit #5 0,1 0 7 'PRINTER' 0,0 0 0 unit #6 unit #7 0,0 0 0 unit #8 0,0 0 0 unit #9 0,1 0 0 unit #10 0,1 0 0 unit #11 0,1 0 0 unit #12 0,1 0 0 unit #13 0,1 0 0 unit #14 0,1 0 0 unit #15 0,1 0 0 unit #16 0,1 0 0 unit #17 0,1 0 0 unit #lB 0,1 0 0 unit #19 0,1 0 0 unit #20 0,1 0 0 initial values for system filenames TOPSYSF . BYTE · ASCI I 14 '*ASSEMBLER.OBJ . BYTE · ASCII 13 '*COMPILER.OBJ · BYTE · ASCI I 11 ':jcEOITOR.OBJ . BYTE · ASC I I 10 . *F"I LER. OBJ Page 009 28 Sap 82 01871 018EI 01901 01911 01981 019FI 01A61 01A81 01A91 01BOI 01B71 01BEI 01COI 01Cl1 01C81 01CFI 01061 01081 01091 01EOI 01E71 01EEI 01FOI 01Ftl 01F81 01FFI 02061 PAGE 20 20 OB 2A 2E 20 20 00 2A 45 20 2:0 OF 2A 49 4A 20 09 2A 42 20 2:0 OB 2A 2E 20 20 - TPR: MON11. TEXT 20 20 20 20 20 20 20 4C 49 4E: 4B 45 52 4F 42 4A 20 20 20 20 20 20 20 20 20 20 44 45 42 55 47 47 52 2E 4F 42 4A 20 20 20 20 20 20 20 20 55 43 53 44 45 44 54 4F 52 2E 4F 42 20 20 20 20 20 20 20 43 4F 44 45 2E 4F 4A 20 20 20 20 20 20 20 20 20 20 20 20 53 4F 20 20 16 02081 0000 020AI 020AI 020AI 0002* 0208 020AI 46FC 020EI 2E78 02121 2Q7C 02181 43FA 021CI 20C9 021EI 43FA 02221 20C9 02241 6100 02281 02281 2B7C 02301 02301 02301 02301 02301 2260 02341 41FA 02381 303C 023CI 1208 023EI 5340 02401 66FA 02421 02421 02421 02421 2078 02461 02461 2B48 024AI OOFC 024EI 024EI 2B48 02521 DOFC 02561 02561 2B48 02SAI DOFC 02SEI 025EI 2B48 02621 OOFC 02661 02661 2B48 026AI OOFC 026EI 026EI 2B48 02721 DOFC 02761 02761 2B48 027AI DOFC 027EI 027EI 2B48 02821 DOFC 02861 02861 2B48 PAGE - 17 59 53 40 47 52 42 4A 20 20 20 20 20 20 20 20 MONITOR ,~, • BYTE · ASCII 11 '*LINKER.OBJ · BYTE · ASCII 13 '*DEBUGGER.OBJ · BYTE · ASCII 15 '*UCSDEOITOR.OBJ . BYTE · ASCI I 9 ' *COOE. OBJ · BYTE • ASCII 11 '*SYSMGR.OBJ FILE: MONBEGN.TEXT BOTSYSF . WORD a initialzation code starts here 2000 013C 0000 0100 **** **** **** 0000 0000 F'FFC INITIAL MOVE.W MOVE.L MOVE.L LEA MOVE.L LEA MOVE.L BSR PUTSYSC # MOVE.L #$2000,SR $13C,A7 #$OOOOOlOO,AO UNITBL,Al A1, (AO)+ THEENO,A1 A1, (AO )+ SETUPA5" #$00000000 #$00000000,-4(A5) turn on interrupts set up default SP start of monitor end of monitor set up ptr to syscom initialize syscom area FFFC FOCE 002C # GETSYSC MOVE.L LEA MOVE.W INITSYS MOVE.B SUB.W BNE.S A1 -4( A5), A1 TOPSYSC,AO #BOTSYSC-TOPSYSC, DO (AO )+, (A1)+ #1, DO INITSYS copy default into syscom area allocate globals on the heap 0138 FFAE 0800 FFEC 0250 FFE8 0250 FFE4 0250 FFEO 0050 FFDC 0050 FFB6 0008 FF94 0048 FF98 MONITOR 02SAI DOFC 0048 028EI 028EI 2B48 FF8C 02921 5048 02941 02941 2B48 FF88 02981 DOFC 034C 029(1 ... ...,"',--".,..'''...... .... ....- - Page 010 ",,~ MOVE.L PUTIBF MOVE.L AOO.W PUTIFIB # MOVE.L AOO.W PUTOFIB # MOVE.L AOD.W PUTTFIB # MOVE.L AOO.W PUTSFIB # MOVE.L AOD.W PUTCFIB # MOVE.L ADD.W PUTSTBL # MOVE.L AOD.W PUTDREG # MOVE.L AOD.W PUTUREG # MOVE.L FILE: MONBEGN.TEXT # # # AOO.W PUTACCA MOVE.L AOO.W PUTOTBL MOVE.L ADO.W PUTLOGN $138,AO AO AO, -82(A5) #INBUFSZ,AO AO AO, -20( A5 ) #FIBSIZE,AO AO AO, -24( A5 ) #FIBSIZE,AO AO AO, -28(A5) #FIBSIZE,AO AO AO, -32(A5) #FIBSZ,AO AO AO, -36( AS) #FIBSZ,AO AO AO, -74( A5) #FTBLSZ,AO AO AO, -108( AS) #72,AO AO AD, -104( A5) #72,AO AO AO, -116(A5) #8,AO AO AO, -120( A5 ) #DTBLSIZ+MTBLSZ5,AO AO get bottom of heap "a llocate INBUFF allocate INPUTFIB allocate OUTPUTFIB allocate SYSTERM FIB allocate SWAPFIB allocate COOEFIB allocate sys fnames table allocate sym debuggers reg save area allocate users reg save area allocate access record allocate device and mount tables 28 Sap 82 TPR:MONll.TEXT Page 011 --, 029CI 2B48 02AOI DOFC 02A41 02A41 2B48 02A81 I)OFC 02ACI 02ACI 2B48 02BOI DOFC 02B41 02B41 2B48 02B81 DOFC 02BCI 02BCI 2B48 02COI DOFC 02C41 02C41 2B48 02C81 DOFC 02CCI 2438 02001 67** 02021 21C8 02061 2202 02081 C3FC 020CI [)1Cl 020EI 0200* OC 020EI 2B48 02E21 02E21 2B48 02E61 02E61 2B4F 02EAI 3F02 02ECI 02ECI 02ECI 02ECI 02ECI 2060 02FOI 4210 02F21 02F21 2060 02F61 4210 02F81 02F81 02F81 02F81 02F81 2B7C 03001 03001 41EO PAGE - 18 03041 03081 03081 030CI 030EI 030EI 03121 03121 03161 03161 03161 03161 031AI 031AI 031EI 031EI 031EI 031EI 03221 03261 03261 03261 03261 032AI 032EI 032EI 032EI 032EI 03321 03361 03361 03361 03361 033AI 033EI 033EI 033EI 033EI 03401 03461 034AI 034CI 03S01 03S01 03S01 03501 "'_........,. _ _ FF60 0020 # FFSC 0498 # FF04 0018 # FFCC 0018 # FF82 02S0 # FFBA OOFC 0144 # 0144 0200 111 FFF4 # FFF8 # # FFB2 MOVE.L AOO.W PUTUT17 MOVE.L AOO.W PUTSYV MOVE.L AOD.W PUTOKV MOVE.L AOO.W PUTXFIB MOVE.L AOO.W PUTUTBL MOVE.L ADO.W MOVE.L BEQ.S MOVE.L MOVE.L MULS AOO.L PUTNP AO, -160( AS) #LOGNSZ,AO AD AD, -164( AS) #UT17SIZ, AD AO AD, -44(AS) #24,AO AO AO, -S2(AS) #24,AO AO AO, -126(AS) #FIBSIZE,AO AO AO,-70(AS) #UTABLSZ,AO $144,02 # # FFCC allocate UT17 volume name table allocate sysunit volume id allocate prefix volume id allocate exec file fib allocate unit table if til AO, $144 02,01 #FBLKSIZ,Ol Dl,AO AO s~vid sizeaf(memar~) > 0 then allocate MEMORY: save new heap top in NP MOVE.L AO, -12(AS) PUTEMTH AO MOVE.L AO, -8(AS) PUTSPTR A7 MOVE.L A7, -78) AS) MOVE.W D2,-(A7 initialize FF04 allocate LOGN bitmap save NP as empt~ heap save SP as default save memory size on top of stack and dkvid GETSYV ·AO MOVE.L -44(AS),AO MOVE.B #0, (AO) GETDKV AO MOVE.L -S2(A5),AO MOVE.B #0, (AO) j int ia 1 ize sysunit vo lid to 00 tnt ia I ize default volid to '0 initialize those with fixed a llocat ion PUTSTRB #$OOOOOEOO MOVE.L #$00000EOO,-86(A5) AODRTHD AO # LEA -S4(AS),AO FILE: MONBEGN.TEXT 0000 aEOO FFAA FFCA MONITOR j save ptr to STRBUF # 30BC A4ES 41EO FFBE 4210 # 4220 FF87 # 4220 FF86 # MOVE.W AOORFLR LEA MOVE.B PUTEBST MOVE.B PUTNXCH MOVE.B #SA4E5, (AO ) AO -66(AS),AO #0, (AO) #0 itO, -121(AS) #0 #0, -122(AS) in it ia I ize the DATE to May 14, 1982 initialize FILLER initialize ebstop to nul initialize next exec char ta nul set up pointer to printer driver 41FA **** 2B48 FF58 LEA PRTDRVR,AO PUTPRNT AO MOVE.L AO, -168( AS) # set up trap $E to point to trap handler 41FA **** 21C8 00B8 LEA MOVE.L HANOLER,AO AO,SB8 j initialize set up trap SO to point to trap handler 41FA **** 21C8 00B4 LEA MOVE.L TRP2MAX,AO AO,SB4 ; in it ia I ize TRAP #SO set up trap SC to point to trap handler 41FA **** 21C8 OOBO LEA MOVE.L 41FA **** 21C8 0018 LEA MOVE.L SOFTBPT,AO AD,SBO ; in it ia I ize TRAP #$C set up CHK exception to point to trap handler CHKERR,AO AO,S18 initialize CHK exception save zero page at tFOO 91C8 0000 OFOO 303C 003F 2208 51C8 FFFC 227C MOVEOP MOVE.L MOVE.L MOVE.W MOVE.L OBF #SOOOOOOOO,AO #SOOOOOFOO,A1 #63,00 ( AO )+, (A1 )+ OO,MOVEOP initialize unit table GETUTBL Al ~~~I.," .." •••...,.''' •• zero page length is 64 longs 28 Sap 82 226D "SA 41FA FCOC 303C OOFC 0350, 03541 03581 035CI 035CI 035EI 03601 03621 03621 PAGE TPR:HONll.TEXT INITUTBL 1208 5340 66FA - 19 MONITOR 03621 03621 03621 2260 FF86 03661 41FA FOC8 036AI 303C 0008 036EI 036EI 1208 03701 5340 03721 66FA 03741 03741 03741 03741 03741 03741 6100 "'''''''''' 03781 03781 03781 03781 6100 "'*"'''' 037CI 037CI 037C1 037CI 4A88 0148 03801 67 ...... 03821 03821 If3C 0001 03861 3F3C 0002 038AI 6100 ."''''''' 038EI 038EI IFlC 0001 03921 3F3C 0001 03961 6100 _...... '" 0380'" 18 039AI 039AI IFlC 0001 039EI 3FlC 0003 03A21 6100 _."'''' 03A61 03A61 IFlC 0001 03AAI 3FlC 0007 03AEI 6100 _.** 03B21 03B21 IF3C 0001 03B61 3Flt 0006 03BAI 6100--** 038EI 03BEI IflC GOal 03C21 3flC 0005 03C61 6100 _.** 03CAI 03CAI IflC .001 03CEI 3flC 1004 03021 6100 -** 03061 03061 PAGE - 20 MONITOR 03061 03061 03081 03081 03081 03081 030CI 030CI 030CI 030CI 03EOI 03EOI 03EOI 03EOI 03E41 03E41 03E41 03E41 03E81 03E81 03E81 03E81 03ECI 03ECI 03EOI 03F41 " MOVE.L LEA MOVE.W -70(A5),Al TOPUTSL,AO #BOTUTBL-TOPUTBL,OO MOVE. 8 SUB.W BNE.S (AO )+, (Al)+ #1,00 INITUTBL , in it ia I ize system filenames table F'ILE: MONBEGN.TEXT # INITSYSF GETSTBL Al MOVE.L -74(A5),Al LEA TOPSYSF,AO MOVE.W #BOTSYSF-TOPSYSF,OO MOVE.B SUB.W BNE.S (AO )+, (AI )+ #1,00 INITSYSF zero #4: (ie. MEMORY:) note the memory size in blocks has already been pushed on top of stack BSR ZEROMEM initialize the BSR devi~e table INITOEV test ford1sks, setup device table and setup the mount table TST.L BEQ.S $148 NOTWGOR MOVE.B MOVE.W BSR #1, -fA7 ~ #2,- A7 RDMTA8L MOVE.B MOVE.W BSR #1'-fA7~ #1,- A7 ROMTABL MOVE.B MOVE.W 8SR #1'-fA7~ #3,- A7 ROMTABL MOVE.B MOVE.W BSR #1'-fA7~ #7,- A7 ROMTABL MOVE.B MOVE.W BSR #1'-fA7~ #6,- A7 ROMTABL MOVE.B MOVE.W BSR #1, -fA7 ~ #5,- A7 ROMTABL MOVE.B MOVE.W BSR #1'-fA7~ #4, - A7 ROMTABL NOTWGOR ; setup 60hz handler for automatic unmount of profile FILE: MONBEGN.TEXT 4E71 NOP 6100 -** BSR get root volume directory, then init syvid, dkvid, thedate GETROIR initialize files 6100 _"'* BSR 6100 -"'* BSR INITFLS update SYSCOM area with MON.MISCINFO INITMI try to execute MON. STARTUP 6100 -"'''' BSR 6000 -"'''' BRA XSTRTUP print welcome message and startup monitor at the command line 08 43'" 4E 53 'IF 4C 45 3" Ii , FILlSTR .BYTE .ASCII WELCOME 8 'CONSOLE: Page 012 28 Sap 82 TPR:MONll.TEXT , 03F61 03FSI 08 FIL2STR .BYTE 8 03F71 53 59 53 54 45 52 40 . ASCII • SYSTERM: • 03FEI 3A 20 04001 04001 INITIALIZE FILES 04001 030E'" 0022 INITFLS 04001 04001 04001 initialize INPUTFIB 04001 04001 GETIFIB A1 04001 2260 FFEC MOVE.L -20(A5~'A1 04041 2F09 MOVE.L A1,-(A7 040S1 4869 0050 PEA FBUFFER Al) 040AI 4267 MOVE.W #0,-(A7 040CI S100 "''''** BSR FINIT 04101 GETI FIB - (A7 ) # 04101 2F20 FFEC MOVE.L -20(A5),-(A7) 04141 487A FF06 PEA FILlSTR 04181 3F3C 0001 MOVE.W #1,-(A7) 041CI 42A7 CLR. L - (A7) 041EI 6100 **** BSR FOPEN 04221 initialize OUTPUTFIB 04221 04221 GETOFIB A1 04221 04221 2260 FFE8 # MOVE.L -24(A5),A1 PAGE - 21 MONITOR FILE: MONBEGN.TEXT • 042S1 2F09 04281 4869 0050 042CI 4267 042EI 6100 **** 04321 04321 2F20 FFE8 04361 487A FFB4 043AI 3F3C 0001 043EI 42A7 04401 6100 **** 04441 04441 04441 04441 04441 2260 FFE4 04481 2F09 044AI 4869 0050 044EI 4267 04501 6100 **** 04541 04541 2F20 FFE4 04581 487A FF9C 045CI 3F3C 0001 04601 42A7 04621 6100 **** 04661 04661 4E75 04681 04681 OC 04691 40 4F 4E 2E 40 49 53 04701 43 49 4E 46 4F 20 04761 04761 04761 04761 0000 0050 04761 0000 0250 04761 03E2* 0094 04761 4E56 FOBO 047AI 48SE FFBD 047EI 42A7 04801 3F3C FFFF 04841 6100 "'*** 04881 48SE FFBO 048CI 487A F:FOA 04901 3F3C 0001 04941 42A7 049S1 6100 **** 049AI 049AI 20S0 FFFC 049EI 4A10 04AOI 6S*'" 04A21 42A7 04A41 486E FFBO 04A81 48SE FOBD PAGE - 22 MONITOR FILE: 04ACI 04BO, 04B21 04B61 04BAI 04BCI 3F3C 0001 4267 3F3C 0001 6100 4A5F "'''''''''' 6700 .,----.""".., .. .." "'''''''''' ,~ MOVE.L PEA MOVE.W BSR GETOFIB MOVE.L PEA MOVE.W CLR.L BSR # A1'-(A7~ FBUFFER Al) #O,-(A7 FINIT -( A7 -24 A5),-(A7) FILlSTR .l,-)A7) -(A7 FOPEN 1 Pag_ 013 IiIf i Ie initialize fib @file @title openold:=true junk @file initialize fib (If i Ie IiItitle openold:=true junk initialize SYSTERM FIB GETTFIB MOVE.L MOVE.L PEA MOVE.W BSR GETTFIB MOVE.L PEA MOVE.W CLR.L BSR # # , @fi Ie -28[AS~' Al,A7 AI FBUFFER Al) #O,-(A7 FINIT -(A7 ( -28 A5),-(A7) FIL2STR #l,-)A7) -(A7 FOPEN initialize fib IiIf i Ie IiItitle openold:=true junk RTS SMSCNFO . BYTE . ASCII , A1 INITMI 12 'MON.MISCINFO ' -- initialize SYSCOM with MON.MISCINFO MISCFIB EQU MISCBUF EQU FIBSZ MISCFIB+FBLKSIZ INITMI AS,#-MISCBUF -MISCFIB(AS) -( A7 ) #-1,-(A7) FINIT -MISCFIB(AS) SMSCNFO #1,-)A7) -(A7 FOPEN AO -4(A5),AO (AO) INITMIX -(SP) LINK PEA CLR.L MOVE.W BSR PEA PEA MOVE.W CLR.L BSR GETSYSC # MOVE.L TST.B BNE.S CLR.L PEA PEA MONBEGN.TEXT MOVE.W MOVE.W MOVE.W BSR TST.W BEQ -MISCFIB~AS ~ -MISCBUF AS -! #1, SP #0,SP #1,- SP BLKIO (A7 )+ INITMIX l IiIf i Ie untyped file initialize fib ®f i Ie ®title openold:=true junk open the file exit if ioresult is nonzero Room for function result File address Buffer address # Blocks to read Block to read Read:=true test #blocks read, exit if zero 28 Sep 82 04COI 41EE 04C41 DOFC 04C81 04C81 2260 04CCI 5C49 04CEI 7013 04001 3208 04021 5340 04041 66FA 04BE* 0018 04AO* 34 04061 4E5E 04081 4E75 040AI 040AI 040AI 040AI 040AI 040AI 040AI 040AI 0376* 0164 040AI 4E56 040EI :442E 04E21 67** 04E41 04E41 04E41 04E41 204F 04E61 303C 04EAI 4298 04ECI .51C8 04FOI . 04FOI 04FOI 04FOI 204F 04F21 317C 04F81 43E8 04FCI 22FC 050~ 22FC 05081 3142 050CI 317C 05121 05121 05121 05121 204F 05141 2278 05181 D2FC 051CI 303C PAGE - 23 05201 05221 04E2* 05261 05281 052AI 052CI 052EI 052EI 052EI 037A* 052EI 05321 05341 05361 05381 053AI 053CI 053EI 05401 05421 05441 05461 05481 05481 054CI OS4EI 05501 05541 0552* 05581 055CI 05601 05641 05681 056CI 05701 05741 05781 055A* 05781 057CI 05801 05841 TPR: MONll. TEXT FOBO 003A LEA AOO.W GETSYSC # MOVE.L AOO.W MOVE.L INITMIL MOVE.W SUB.W BNE.S FFFC INITMIX UNLK RTS -HISCBUF(A6),AO #S8,AO Al -4( A5 ), Al #OFSMISC-TOPSYSC, Al #19,00 (AO )+, (AI )+ #1,00 INITMIL Page 014 compute tlsource compute ~destination copy MISCINFO from file to SYSCOM A6 PROCEDURE ZEROMEM(BLKS:INTEGER) stack 8 4 o ZEROMEM LI NK MOVE.W BEQ.S F800 0008 number of blocks return address old A6 A6,#-2048 8(A6),02 @3 allocate 2k for directory if no memory then exit zero the directory 01FF ~1 FFFC MOVE.L MOVE. W MOVE.L OBF A7,AO #511, DO #O,(AO)+ 00,@1 fill 512 longs with zero fill in dir..entry[O] 0006 0006 0640 4F52 OOOE A4E5 MOVE.L MOVE.W LEA MOVE.L MOVE.L MOVE.W ·MOVE. W 0002 4540 5900 0014 A7,AO #6, LSTBLK(AO) OVIO(AO),A1 #$06404540,(A1)+ #$4FS2S900,(A1)+ 02, OEOVBLK ( AO ) #$A4E5,OLASTBT(AO) fill in only nonzero fields first .. last is 0 .. 6 set OVID to MEMORY set number of blocks (no files) set DATE to May 14, 1982 copy the directory to #4: 0144 0400 01FF MONITOR 2208 51C8 FFFC 42 4E5E 205F 544F 4EOO MOVE.L M('IVE.L AOO.W MOVE.W FILE: MONBEGN.TEXT A7,AO S144,A1 #2*FBLKSIZ,A1 #511, DO ~2 MOVE.L OBF (AO )+, (A1)+ 00,@2 @3 UNLK MOVE.L AOO.W JMP A6 (A7)+,AO #2,A7 (AO) copy 512 longs initialize the device table 01B4 4E56 FFEO 204F 4280 20CO 20CO 20CO 20CO 70FF 20CO 20CO 20CO 20CO 2260 4240 204F 45F A 4EF2 0006 6000 6000 6000 6000 6000 6000 6000 6000 001E 2660 06FC 214B 6000 FF88 **** 0000 **** **** **** **** **** **** **** **** FF88 0100 0014 **** INITOEV LINK MOVE.L CLR.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L GETOTBL # MOVE.L MOVE.W OEVLOOP MOVE.L LEA JMP OOfl' OEVJMPT BRA BRA BRA BRA BRA BRA BRA BRA OEVNUMO GETOTBL OEVNUMO OEVNUMI OEVNUM2 OEVNUM3 OEVNUM4 OEVNUM5 OEVNUM6 OEVNUM7 A3 # MOVE.L AOO.W MOVE.L BRA A6,#-ONTRYSZ A7,AO DO DO,!," ). clear device name DO, AO)+ DO, AO ~+ ~O, AO + #-1,00 DO, AO + DO, AO ~+ ~O, AO + Al -120(A5), Al #0,00 A7,AO OEVJMPT,A2 0(A2, ~O) -120( AS ), A3 #OTBLSIZ,A3 A3, OEVMTBL ( AO ) OOCOPY base of hardware mount table driver jump table global data area 28 Sep 82 05881 055E* 002A 05881 2660 058CI 06FC 05901 214B 05941 6000 0562* 0036 05981 06FC 059CI 214B 05AOI 60** 0566* 003C PAGE - 24 05A21 OSA81 05ACI 05BOI OS6A* 05B21 05B81 OSBAI 05B8* 05C21 05C61 05CAI 056E* 05CCI 05021 05041 0502* o~oq 2178 06FC 214B 60** 0048 2178 67** 06A8 08 06FC 214B 60** 005E 2178 67*", 06A8 08 06FC 214B 60** 0074 2178 67** 06A8 08 06FC 214B 60** 008A 2178 67** OGA8 08 DGFC 214B 18 32 4C 66 76 0082 0092 7207 2208 51C9 5840 OC40 6600 05EOI OSE41 0572* 05E61 05ECI 05EEI 05EC* 05F61 05FAI 05FEI 0576* 06001 06061 06081 0606* 06101 06141 05FE* 05E4* 05CA* 05BO* OSAO* 0596* 0586* 06181 061AI 061CI 06201 06221 06261 062AI 062AI 062AI 062AI 062AI 2060 062EI 303C 06321 4298 PAGE - 25 06341 06381 06381 06381 06381 06381 063CI 06401 06421 06441 06481 064AI 064CI 064CI 064EI 06551 06561 06561 06581 065FI 06661 0668, 06681 06681 TPR:MONl1.TEXT OEVNUM1 GETDTBL A3 FF88 0100 0014 **** 0054 0014 MONITOR MOVE.L AOO.W MOVE.L BRA -120(A5).A3 #OTBLSIZ,A3 A3, DEVMTBL(AO) OOCOPY OEVNUM2 ADD.W MOVE.L BRA.S #MTBLSIZ,A3 A3,DEVMTBL(AO) DOCOPY # FILE: MONBEGN.TEXT 0134 0010 0054 0014 DEVNUM3 MOVE.L ADD.W MOVE.L BRA.S S134,OEVBASE(AO) #MTBLSIZ,A3 A3,DEVMTBL(AO) DOCOPY 0158 0010 OEyN~M4 MOVE.L BEQ.S ADD.L $158,OEVBASE(AO) ®1 #$2001,DEVBASE(AO) 0054 0014 ®l AOD.W MOVE.L BRA.S #MTBLSIZ,A3 A3, DEVMTBL ( AO ) DOCOPY 0158 0010 DEVNUM5 MOVE.L BEQ.S ADD.L 0000 2001 0010 0000 2801 0010 ADD.W MOVE.L BRA.S 0054 0014 $158,DEVBASE(AO) (111 #$2801,DEVBASE(AO) #MTBLSIZ,A3 A3,DEVMTBL(AO) DOCOPY DEVNUM6 MOVE.L BEQ.S ADD.L $158,OEVBASE(AO) (111 #$3001,DEVBASE(AO) 0054 0014 (i1 #MTBLSIZ,A3 A3, DEVMTBL( AO ) DOCOPY 0158 0010 OEVNUM7 MOVE.L BEQ.S ADD.L 0158 0010 0000 3001 0010 0000 3801 0010 ADD.W MOVE.L BRA.S 0054 0014 ADD.W MOVE.L FFFC DOCOPY MOVE.L CPYLOOP MOVE.L DBF AOD.W CMP.W BNE 0020 FF26 S158,OEVBASE(AO) (111 #$3801,OEVBASE(AO) #MTBLSIZ,A3 A3,DEVMTBL(AO) #DNTRYSZ/4-1,D1 (AO )+, (A1)+ D1,CPYLOOP #4,00 #4* ,DO DEVLOOP clear LOGN bitmap FF60 0007 MONITOR GETLOGN AO MOVE.L -160(AS),AO MOVE.W #MAXDEV,DO ®1 CLR. L (AO)+ FILE: MONBEGN.TEXT # DBF SiCS FFFC DO,®l clear UT17 volume name table 2060 FF5C 303C 0092 4298 4298 51C8 FFFA 4E5E 4E75 " @2 , 0008 57 65 6e 63 6F 60 65 20 WILPL WIPL 0010 20 74 6F 20 4C 69 73 61 20 40 6F 6E 69 74 6F 72 W2LPL W2PL GETUTl7 MOVE.L MOVE.W CLR.L CLR.L DBF UNLK RTS AO -164( AS ), AO #UTl7SIZ/8-1, DO (AO )+ (AO )+ DO,®2 A6 · WORD · ASCII 8 · WORD · ASCII 16 'Welcome • , to Lisa Monitor XSTRTUP -- execute MON. STARTUP Page 015 TPR:MON11.TEXT 28 Sep 82 06681 06681 066e, 06701 06701 06741 06761 06781 067AI 067CI 067EI 06821 06841 06861 06881 068CI 06901 06941 06981 0684'" 069CI 069EI 066E* 069EI 069FI 06A61 06AAI 06AAI XSTRTUP DBUGCLR MOVE.B LEA GETSTRB # MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L CLR.W BSR TST.W BEQ.S TST.L BSR BSR BSR BSR BRA 4220 FFA9 41FA "'''''''''' 2260 2208 2208 2208 2208 4241 6100 4A40 67** 4A9F 6100 6100 6100 6100 6000 16 4E75 # FFAA """"'''' **** """"'''' """** "'''''''* "''''*''' 06AAI 6100 "'''''''* 6100 ...... """ PAGE - 26 MONITOR ~AEI 06B21 6100 "'''' ... ''' 06861 3F3C 0008 06BAI 6100 **"'* ~BEI 5357 06COI 66F8 06C21 4A5F O6C4I 43FA FF88 06C81 343A FF82 06CCI 6100 ***'" 06DOI 06001 2260 FFD4 0604t 1419 06061 4882 06081 6100 ***'" O6DC1 43FA FF7A aGEOI 343A FF74 06E4t 6100 *"''''* 06E81 6100 "'''''''''' 06ECI 6000 """"'''' Q6FOI O6F01 Q6FO, 06FOI O6F01 06F01 O6F01 0000 06f'21 0000 0000 Q6F61 OOOF 06F81 0000 0000 O6FC1 OOOF 06FEI 0000 0000 07021 0000 D704t 0000 0000 81081 OOOF 070AI 0000 0000 01'0EI OOOF 87101 0000 0000 G714t 0006 97161 0000 0000 871At 0005 W1tl 0000 0000 17201 0006 '17221 0000 0000 ·D7261 OOOF I728i 0000 0000 unci OOOF W2EI 0000 0000 17321 OOOF 1734t 0000 0000 J,.Tl8! OOOF r1AI 0000 0000 ..7JEt OOOF .,401 0000 0000 ,.,...... OOOF 11461 0000 0000 ~ 27 MONITOR .......", 00 OF %(4:1 0000 0000 SSiJI OOOF 5"S2I CODO 0000 ; just execute system. startup #0, -87( AS) STARTUP,AO Al ! ~g6Ii~5!2i AO Al AI: +, +, AO Al AO +, Al 01 TRYEXEC DO @2 (A7 )+ GETREGS INITPRG HOMCRSR CLRSCR CMDLOOP 16 bytes is 4 longs + + + MON. STARTUP doesn't have EXEC/ delete return address RTS 0030 OB 40 4F 4E 2E 53 54 41 52 54 55 50 ~A~ Page 016 STARTUP .BYTE · ASCI I 11 'MON. STARTUP' WELCOME -- prints welcome message , WELCOME BSR BSR FILE: MONBEGN.TEXT BSR MOVE.W WELCOM2 BSR SUB.W BNE.S TST.W LEA MOVE.W BSR GETSYV # MOVE.L MOVE.B EXT.W BSR LEA MOVE.W BSR BSR BRA GETREGS HOMCRSR CLRSCR #8,-(A7) WCRLF #1, (A7) WELCOM2 (A7 )+ WIPL,Al WtLPL,D2 PRINT Al -44(A5),AI (At )+, 02 02 PRINT W2PL,A1 W2LPL,D2 PRINT WCRLF CMDLOOP print CRLF's to middle of screen delete CRLF counter print 'Welcome' print sysunit volid print' to Lisa Monitor' START OF THE RESIDENT PART OF THE MONITOR ----- , UNIT TABLE -- VECTORS TO DRIVERS UNITBL .WORD · WORD .. WORD . WORD . WORD · WORD . WORD . WORD · WORD . WORD . WORD . WORD . WORD · WORD · WORD · WORD . WORD · WORD . WORD . WORD · WORD · WORD · WORD . WORD . WORD · WORD · WORD . WORD . WORD . WORD FILE: MONBEGN.TEXT . WORD . WORD . WORD · WORD a 0,0 ALLBIT 0, a ALLBIT 0,0 o 0: Unit 1: CONSOLE: illegal Unit 2: SYSTERM: (non-echoing keyboard) Unit 3: not used Unit 4: disk drive DRVR DRVR 0,0 ALLBIT 0,0 ; DRVR ALLBIT 0,0 ; DRVR OUTBIT+CLRBIT 0,0 ,DRVR INBIT+CLRBIT 0,0 ,DRVR OUTBIT+CLRBIT 0,0 DRVR ALLBIT 0,0 DRVR ALLBIT 0, a DRVR ALLBIT 0, a DRVR ALLBIT 0,0 DRVR ALLBIT 0,0 DRVR ALLBIT 0,0 DRVR ALLBIT 0,0 ALLBIT 0,0 Unit a Unit 5: disk drive 1 Unit 6: PRINTER: Unit 7: REMIN: Unit 8: REMOUT: Unit 9: disk drive 3 Unit 10: disk drive 4 Unit 11: disk drive 5 Unit 12: disk drive 6 Unit 13: disk drive 7 Unit 14: disk drive 8 Unit 15: disk drive 9 DRVR Unit 16: disk drive 10 DRVR 28 Sep 82 07561 07581 075CI 075EI 07621 07641 07681 076AI 076EI 076EI 076EI 076EI 07721 07761 077AI 077EI 07821 07861 078AI 078EI 07921 07961 079AI 079EI 07A21 07A61 07AAI 07AEI 07B21 07B61 07BAI 07BEI 07C21 07C61 07CAI 07CEI 07021 07061 07DAI 07DEI 07E21 07E61 07EAI 07EEI 07F'21 07F'61 07F'AI 07F'EI 08021 08061 080AI PAGE OOOF' 0000 OOOF' 0000 OOOF' 0000 OOOF' 0000 TPR:MON11.TEXT . WORD . WORD • WORD . WORD . WORD . WORD . WORD . WORD 0000 0000 0000 0000 ALLBIT 0,0 ALLBIT 0,0 ALLBIT 0,0 ALLBIT 0,0 Unit 17: disk drive 11 ORVR Unit 18: disk drive 12 DRVR Unit 19: disk drive 13 DRVR Unit 20: disk drive 14 DRVR ; JMPTBL BRA ZZLOADIT 6000 "'''''''''' 6000 "'''''''''' BRA ZZUNLOAD BRA __ . F'WRTCHAR 6000 "'''''''''' J..'f.le BRA F'WRITELN 6000 "'''''''''' .j,Fb€ BRA F'READCHR 6000 "'''''''''' OZFf" F'READLN 6000 "'''''''''' ';tF& BRA. F'INIT 6000 BRA "'''''''''' BRA __ _ F'OPEN 6000 "'''''''''' BRA BLKIO 6000 "'''''''''' BRA MNEW 6000 "'''''''''' BRA MMRK 6000 "'''''''''' BRA MRLS 6000 "'''''''''' BRA MEMA 6000 "'''''''''' BRA UCLR 6000 "'''''''''' BRA UREAO 6000 "'''''''''' BRA UWRITE 6000 "'''''''''' BRA 6000 UBUSY "'''''''''' BRA 6000 ZZIORES BRA REMOVE1 6000 "'''''''''' "'''''''''' 6000 BRA=_ ""F'CLOSE BRA 6000 MH!\LT BRA MIOERR 6000 "'''''''''' "'''''''''' BRA MGOTOXY 6000 "'''''''''' BRA RCERR 6000 "'''''''''' BRA SCERR 6000 "'''''''''' BRA LAUNCH 6000 "'''''''''' BRA F'GET 6000 "'''''''''' 31.,1% BRA. F'PUT 6000 "'''''''''' 3.A~A BRA F'SEEK 6000 "'''''''''' BRA SCANTTL 6000 "'''''''''' BRA F'REEPROC 6000 "'''''''''' BRA VOLSRCH 6000 "'''''''''' BRA DIRSRCH 6000 "'''''''''' BRA F'RESET 6000 "'''''''''' BRA I NSNTRY 6000 BRA OELNTRY 6000 "'''''''''' "'''''''''' BRA ADDR2S0 6000 "'''''''''' BRA PMADDR2S 6000 "'''''''''' ADDRDRVR 6000 "'''''''''' ~Ja.RA AOSKINIT 6000 ~:BRA "'''''''''' FILE: MONITOR - 28 MONBEG~.TEXT offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset offset ·OSKREAD OSKWRT 'SETHDSK HDSKCSZ RDMTABL REVISION offset offset offset offset offset offset 080EI 08121 08161 081AI 081EI 08221 08261 08261 08261 08261 082AI 082EI 08321 08341 08341 08341 08341 08341 082C'" 08341 08361 08381 083CI 083EI 08401 08421 08461 0840'" 08481 084CI 08501 08S01 08S01 07CO'" 08501 08541 08561 08561 08561 08561 07CC'" 08561 *"''''''' 6000 6000 6000 6000 6000 6000 "'''''''''' "'''''''''' "'''''''''' "'''''''''' . "''''*''' "''''*''' BRA BRA BRA c-B~A 4' BRA BRA o ia 16 20 2 28 32 3 40 44 4 = 52 56 60 64 68 72 76 80 84 88 92 96 100 1 104 108.-..1 11Z116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 .Validate index, check for stack overflow, and jump to routine ; 21CE 0140 41F'A "'''''''''' 2F'48 0002 4E73 HANDLER MOVE.L LEA MOVE.L RTE 0000 00B8 MAXINDX EQU HANDLER-JMPTBL GETINDX MOVE.W BMI.S CMPI.W BGT.S TST.W BEQ.S BSR BSR.S (A7 )+, DO INDXERO #MAXINDX, DO INDXERO DO @1 SETUP AS OVFCHK get index word if (index maxindx) then goto indxerO @1 JMPTBL,AO O(AO,DO) get address of jump table go to it , 0008 301F' 6B"'''' OC40 6E** 4A40 67"'''' 6100 61"'''' 06 41FA 4EFO 00B8 "'''''''''' FF24 0000 A6, $140 GETINDX, AO AO,2(A7) update PC with entry point get back to callers stack DON'T MOVE HANDLER LEA JMP skip overflow check for ZZLOADIT get pOinter to system globals MHALT -- programmed halt 0090 3F3C 0002 60"'''' MHALT , RCERR 008A 4A2D FFA8 # MOVE.W BRA.S #2,-(A7) INDXERR ; push error# 2 RCERR -- range check error from paslib routine RUNUTST TST.B -88( AS) TPR: MaNU. TEXT 28 Sap fl2 08SAI 67"'''' OSSCI 40E7 08SEI aF3C 0006 OS621 6000 "'''''''* 08SA'" OA OS661 3F3C 0003 086AI 60"'''' 086CI 086CI 086CI 086CI 0700'" 009C 086CI 4A2D FFA8 PAGE - 29 MONITOR @1 , SCERR SR, -~A7 ~ #6,- A7 SOFTBO MOVE.W 8RA.S #3, -(A7) INDXERR push error# 3 RUNUTST # I!lI ; SeERR -- string index error TST.B FILE: MONBEGN.TEXT 08701 67** OS721 40E7 08741 3F3C 0006 08781 6000 "'''''''''' 0870* OA 087CI 3F3C 0004 08801 60** 08821 08821 08821 0846'" 3A 08821 48E7 ooeo 08861 204F 08881 91FC 0000 0100 OSSEI 088EI 2260 FFF4 08921 81C9 08941 6E** 08961 3F3e 0001 089AI 6000 "'*"'* 0894* 08 089EI 4CDF 0300 08A21 4E75 08A41 08A41 oooe 08A61 46 61 74 61 SC 20 45 08ADI 72 72 6F 72 20 08821 08821 08821 08821 08821 08821 08821 08821 08821 08821 08821 08821 08821 08821 08B21 08821 08821 083e* 74 0836* 7A 08821 4:267 08ge* 0018 0880* 32 086A* 48 0854* 51E 08B41 4E56 FFFE 08881 43FA FFEC 088CI 343A FFE6 08COI 6100 **"'. FILE: PAGE - 30 HONItGr 08C41 43EE 08C81 7402 08CAI 328C 08CEI 302E 08021 48CO 08041 6000 080SI OSDSI OS081 OS081 2FOo OSoAI 6100 08DEI OSoEI 4A2o OSE2, 2ASF OSE41 67** OSE61 3F3C 08EAI 6000 OSE4* 08 OSEEI 3F3C 08F21 60CO OSF41 OSF41 (ill BEQ.S MOVE MOVE.W BRA -88(A5) 8EQ.S MOVE MOVE.W 8RA @1 SR, -~A7 ~ #6,- A7 SOFTBO MOVE.W BRA.S #4, - (A7) INDXERR ; push error# 4 OVFCHK -- stack overflow check routine OVFCHK # MOVEM.L MOVE.L SUB.L GETNP MOVE. L~ CMP.L 8GT.S . MOVE. W BRA get some room AO/Al,-(A7) A7,AO #256,AO Al -12(A5),A1 Al,AO OVFCHKX #1, - (A7 ) INDXERR make sure at least 256 free b!::ltes stack overflow ? !::I es , error no, just return OVFeHKX MOVEM.L (A7 )+, AO/A1 RTS , HLPL HPL . WORD . ASCII 12 'Fatal Error INDXERR - Fatal trap handler errors come here. error #0 #1 #2 #3 #4 #5 trap index out of range stack overflow programmed halt value range error invalid string index can't read root volume stack 4 error# old A6 errornumber o -2 INDXERO MOVE.W #0, -( A7) push error# 0 INDXERR LINK LEA MOVE.W BSR MONBEGN.TEXT A6,#-2 HPL,Al HLPL,D2 PRINT allocate: errornumber address and length -2( A6 ), A1 #2,02 #$30, (Al ) 4(A6),00 DO PRNTERR address and length initialize error number to '0' LEA MOVE.L MOVE.W MOVE.W EXT.L BRA FFFE 0030 0004 *"'_. CHKERR -- range check error from CHK instruction ; CHKERR **.FFAB # 0006 un 0003 @1 MOVE.L BSR RUNUTST TST.B MOVE.L BEQ.S MOVE.W BRA -SS(A5 } (A7 )+, A5 @l #6, - (A7) SOFTBO MOVE.W BRA.S #3, -(A7) INoXERR MIOERR AS, -(A7) SETUPAS -- get pOinter to system globals ; push error# 3 io check routine --.,.-------------~--------------- Page 018 28 Sap 82 08F41 07C4'" 0130 08F41 6000 08F81 08F81 08F81 07C8'" 0130 08F81 307C 08FCI 321F 08FEI 301F 09001 3428 09041 5342 09061 B042 09081 6F"'''' 090AI 3002 0908'" 02 090CI 4A40 090EI 6A"'''' 09101 4240 090E'" 02 09121 3428 09161 5342 09181 B242 091AI 6F"'''' 091CI 3202 091A'" 02 091EI 4A41 09201 6A"'''' 09221 4241 0920'" 102 09241 243C 092AI 1401 092CI 0602 PAGE - 31 09301 E18A 09321 1.0400 09341 0602 09381 2F02 093AI 204F 093CI 487A 09401 :JF3C 09441 2F08 09461 3F3C 094AI 4267 094CI 4267 094EI 6000 093E'" 0014 09521 4A9F 09541 4E75 09561 09561 09561 09561 09561 09561 09561 09561 09561 09561 4E56 095AI 095AI 2060 095EI 302E 09621 EB48 09641 2070 096AI 4E5E 096el 205F 096EI 544F 09701 4EOO 09721 09721 09721 09721 09721 09721 09721 09721 09721 09721 4E56 09761 09761 2060 097AI 302E 097EI EB48 09801 2D70 09861 4E5E 09881 205F 098AI 544F 098CI 4EOO 098EI 09SEI PAGE - 32 TPR:MON11.TEXT MIOERR "'''''''''' BRA Page 019 IOCHK MGOTOXY -- gotolCY MGOTOXY MOVE.W MOVE.W MOVE.W MOVE.W SUB.W CMP.W BLE.S MOVE.W 0000 0018 0016 001B 3000 0020 MONITOR r' #$OOO,AO ~A7 01 A7 +,00 $18 AO), 02 #1,02 02,00 @1 02,00 (ill TST.W BPL.S CLR.W 00 1)2 00 @2 MOVE.W SUB.W CMP.W BLE.S MOVE.W S16(AO),02 #1,02 02,01 <13 02,01 113 TST.W BPL.S CLR.W 01 114 01 C!l4 MOVE.L MQVE.B ADO.B FILE: MONBEGN.TEXT LSL.L MOVE.B AOO.B MOVE.L MOVE.L PEA MOVE.W MOVE.L MOVE.W CLR.W CLR.W BRA 0020 "'''''''''' 0002 0004 "'''''''''' ()l5 TST.L RTS #$lB3000, 02 01,02 #$20,02 #8,02 00,02 #$20,02 D2,-(A7) A7,AO 1i15 T7j '2, AO,- A7 #4,- A7 -~A7 - A7 UWRITE (A7 )+ FUNCTION GETMTBL(OEV:INTEGER):LONGINT stack: 10 8 4 , 0 GETMTBL LINK GETOTBL # MOVE.L MOVE.W LSL.W MOVE.L UNLK MOVE.L AOO.W JMP 0000 FF88 0008 0014 OOOA function result device number return address Old A6 A6,#0 AO -120(A5),AO 8(A6),00 #OEVNSHF,OO OEVMTBL(AO,OO.W),10(A6) A6 (A7 )+, AO #2,A7 (AO) FUNCTION GETBASE(OEV:INTEGER):LONGINT stack: 10 8 4 0 function result device number return address Old A6 ; GETBASE LINK GETDTBL # MOVE.L MOVE.W LSL. W MOVE.L UNLK MOVE.L AOO.W JMP 0000 FF88 0008 0010 OOOA A6,#0 AO -120(A5),AO 8(A6),00 #OEVNSHF,OO OEVBASE(AO,00.W),10(A6) A6 (A7)+,AO #2,A7 (AO) , MONITOR FILE: MONBEGN.TEXT 098EI 098E, 0839 0002 OOFC F801 ....-•. , NEWTMP1 BTST #2, 'SFCF801 test for 60hz interrupt --_ _-----------------_._-------------- 28 Sep 82 09961 6S"'* 099S1 09981 5360 099CI 66** 099EI 487A 09A21 2F"5F" 099C* OS 0996* OE 09A61 2F"l2 09A81 4E75 09AAI 09AAI 09AAI 09AO* OOOA 09AAI 2C6A 09AEI 2E4A 09BOI 40CO 09B21 4GF"C 09BGI 21oF" 09BAI 4A9F" 09BCI 46CO 09BEI 53GE 09C21 67",* 09C41 J02E 09C81 EB4S 09CAI 09CAI 2060 09CEI 43F"A 09021 B3F"0 09061 6700 090AI .o4·3FA 090EI 83F"0 09E21 6700 09C2* 22 09E61 OC6E 09ECI 66** 09EEI 4280 09F"01 09F"01 2F"07 09F21 3E3C 09F61 4E45 09F"SI 2EIF 09EC* OC 09FAI 6000 09FEI 09FEI 09FEI 09F"EI 09F"EI 09F"EI 09F"EI 09F"EI 09F"EI PAGE - 33 09F"EI 09F"EI 09F"EI 09F"EI 0820* 09F"EI OA021 OA041 OAOSI OAOAI OAOCI OAOEI OA141 OA1SI OAIEI OA221 OA241 OA281 OA2CI OA2EI OA321 OA361 OA3S1 OA3CI OA3EI 0A421 OA461 OA4CI OA4EI OASOI OA541 OA581 OA5AI OA4C* OASCI OASA* OA601 OA641 OA661 OA661 TPR:MONll.TEXT F"F"ao **** 0002 BNE.S oECRTOW oECoTOW # SUB.W BNE.S PEA MOVE.L NOT60HZ MOVE.L RTS 0004 2700 00G4 F"F"F"E OOOS F"F"SS **"'* 001S **** *"'** 0018 **** 'QUIToSK MOVE.L MOVE.L MOVE MOVE.W MOVE.L TST.L MOVE SUB.W BEQ.S MOVE.W LSL.W GEToTBL # MOVE.L LEA CMP.L BEQ LEA CMP.L BEQ @1 0003 0008 006C # # # ~~ **"'* @2 NOT60HZ decrement the time out word #1, -128( A5) NOT60HZ QUIToSK (A7 )+, 2(A7) if time out then fudge return address (A2),-(A7) goto old level handler 4(A2),A6 A2,A7 SR,oO #$2700,SR ~A7 ~+, $64 A7 + oO,SR #1, -2( A6 ) @1 8(A6),00 #oEVNSHF",oO AO -120(A5), AO PJMPTBL,A1 oEVJTBL(AO,oO.W),Al RDMTLP NJMPTBL,A1 DEVJTBL(AO,DO.W),Al RDMTLP CMP.W BNE.S MOVE.L TRAPTO MOVE.L MOVE.W TRAP MOVE.L #3, 8(A6) @2 #0,00 108 07, - (SP) #10S,07 #5 (SP)+,07 BRA REINIT J restore the stack frame and cut the stack back restore old level 1 handler discard saved A6 decrement counter quit if zero time out a Profile with headers time out a Profile without headers BUilt in 'port ? yes, set port free PROCEDURE RoMTABL(SETWORK:BOOLEAN; DEV:INTEGER) test for hard disk, setup device table and setup the mount table stack: 10 ; MONITOR S 4 set working device device number return address t:I}E: MONBEGN.TEXT o -2 -514 OlOE 4E5G 204F" 303C 4258 5340 66F"A OC6E 6700 OC6E 6700 42A7 3F"2E 6100 201F" 6700 47F"A 2F"OE 2F"3S 244F" 41F"A 21C8 OC6E 67** 42A7 3F"2E 6100 4A9F" 60"'* OE 6100 04 21DF" 2CSF" Page 020 Old AG counter buffer RDMT ABL LI NK MOVE.L MOVE.W @1 MOVE. W SUB.W BNE.S CMP.W BEQ CMP.W BEQ CLR.L MOVE.W BSR MOVE.L BEQ LEA MOVE.L MOVE.L MOVE.L LEA MOVE.L CMP.W BEQ.S CLR.L MOVE.W BSR TST.L BRA.S A6,#-S14 A7,AO #D$KBLK/2, DO #0, (AO)+ #1,00 @1 #1,S(A6) $ETTWGY #2, 8(A6) SETTWGY -( A7) 8(A6), -(A7) GETBASE (A7)+,00 MVMTABL NEWTMP1,A3 A6, -(A7) $S, -(A7) A7,A2 NOCARD,AO AO,$8 #7, S(A6) @2 -( A7) S(A6),-(A7) CDSKINIT (A7 )+ @3 **** @2 MDSKRES 0008 @3 F"DF"E 0100 0001 OOOS **** 0002 OOOS **** OOOS F"F"4S **** F"F"5A OOOS **** ODDS 0007 0008 0008 **** 3F"2E ODDS BSR MOVE.L MOVE.L ; WHAT DO WE DO MOVE.W initialize the mount table push device number see if ptr to the port is zero and load A3 with @temp handler save A6 save exception vector 3 save A7 for trap to NOCARD set exception vector allocate space for disk size push device number for pippin and corvus discard disk size for marksman (A7)+,$8 restore exception vector 3 (A7)+,A6 , restore A6 IF" INTERRUPTS ARE SHUT OF"F" AND WE CAN'T ABORT THE DISK READ ??? 3(A6),-(A7) ; push device number --------------.----------------------------------------------------------------------------------------------------------------------_.----------- 28 Sep 82 OA6AI 6100 OA6EI OA6EI 307C 09E4* 0090 0908* 009C OA741 OA741 220F OA761 302E OA7AI 6100 OA7EI OA7EI 3B7C OA841 43FA OA881 81C9 OASAI 6S"'* OASCI PAGE - 34 OA8CI 3B7C OA8A'" 06 OA921 2FOE OA941 2F3S OA9S1 244F OA9AI 40CO OA9CI 46FC OAAOI 21CB OAA41 46CO OAA61 4267 OAA81 2FOF OAAAI 3F3C OAAEI 2F3C OAB41 302E OAB81 El48 OABAI 4840 OABCI 303C OACOI 2FOO OAC21 2FOl OAC41 6100 OACSI 321F OACAI 40CO OACCI 46FC OAOOI 210F OA041 2C5F OA061 46CO OAOSI 4A01 OADAI 6BOO OAOEI 302E OAE21 EB48 OAE41 OAE41 2260 OAESI 43Fl OAECI 41EF OAFOI 0210 OAF41 66"'''' OAF61 lOBC OAF4'" 04 OAFAI 42A7 OAFCI 3F2E OBOOI 6100 OB041 261F OBOSI 4267 OBOSI 3F2E OBOCI 6100 OBlOl 301F OB121 EOAB OB141 204F OB161 303C OB1AI OOCO OB1CI 321S OB1EI 3401 OB20, 0241 OB241 67** OB261 OC41 PAGE - 35 OB2AI OB2C, OB30, OB321 OB361 OB3S1 OB3AI OB3CI OB3EI OB401 OB441 OB461 OB4AI OB44* OB4CI OB501 OB521 OB541 OB561 OB581 67"'''' OC41 62** 0242 67"'* B443 62** 3218 3801 0241 67** OC41 66"'* 06 0244 67** 8843 62*'" B444 62** TPR: MON11. TEXT "'''''''''' 0004 FFFE '* c~~~it· BSR RDMTINIT MOVE.W Pllge 021 SETHOSK set up ptr to driver jump table #4,-2(A6} set counter A7,01 8(A6), DO GETJTBL #60 #SO, -12S(A5) MJMPTBL,Al Al,AO @1 #120 save address of buffer ROMTLP 0008 **** 003C FF80 *"'*'" MONITOR 0078 FF80 MOVE.L MOVE.W BSR PUTDTOW # MOVE.W LEA CMP.L BNE.S PUTOTOW FI~ MONBEGN. TEXT MOVE.W # @1 0064 2700 0064 MOVE.W MOVE.L MOVE.W LSL. W SWAP MOVE.W MOVE.L MOVE.L BSR MOVE.W MOVE MOVE.W MOVE.L MOVE.L MOVE TST.B BMI MOVE.W LSL.W GETDTBL MOVE.L LEA LEA AND. B BNE.S MOVE. B 0007 *"'** 2700 0064 "''''*''' 0008 # 0001 0008 "'''''''''' 0008 "'''''''''' 0100 EOOO EOOO MONITOR CHKBLK7 CLR.L MOVE.W BSR MOVE.L CLR.W MOVE.W BSR MOVE.W LSR.L MOVE.L MOVE.W AOO.W LOOPVOL MOVE.W MOVE.W ANO.W BEQ.S CMP.W tILE: MONBEGN.TEXT 4000 1FFF EOOO 8000 1FFF @1 if marksman then setup disk time out word 2.0 second #120, -12S(A5) A6,-(A7) S64,-(A7} A7,A2 SR,OO #$2700,SR A3,$64 ~~~:~L ;r~~R(A71 0001 0000 0001 0008 FF88 0000 0038 0007 MOVE.L MOVE.L MOVE.L MOVE MOVE.W MOVE.L get devjtbl ptr setup disk time out word 1.0 second #1,- A7 #1,- A7 8(A6 ,DO #8, DO DO #7,DO DO,-(A7) 01, -(A7) DSKREAO (A7)+,Ol SR,DO #$2700,SR (A7)+,SS4 (A7)+,A6 DO,SR 01 REINIT 8(A6},DO #DEVNSHF,DO Al -120(A5),Al OEVNAME(Al,OO.W),Al S40-8(A7),AO #7, (AO) CHKBLK7 # 1, (AO ) -~A7 ) S AS), - (A7 ) HOSKINIT (A7 )+, D3 -fA7 } 8 A6), -(A7) HOSKCSZ (A7 )+, DO DO,D3 A7,AO #$100,00 OO,AO (AO )+,01 D1,D2 #$EOOO, 01 BREINIT #$EOOO, 01 BEQ.S CMP.W BHI. S ANO.W BEQ.S CMP.W BHI. S MOVE.W MOVE.W ANO.W BEQ.S CMP.W BNE.S CHKMTBL #$4000,D1 BREINIT #$lFFF,02 BREINIT 03,02 BREINIT (AO)+,Ol 01,04 #$EOOO, 01 @1 #SSOOO, 01 BREINIT ANO.W BEQ.S CMP.W BHI.S CMP.W BHI.S #$lFFF, 04 BREINIT 03,04 BREINIT 04,02 BREINIT save A6 save old level 1 handler save A7 for trap to QUITOSK setup temp handler for level 1 allocate RC push @RC push drv push block count get device number ·f ill push push read save in .b lock number dev# and block# @buffer the mount table RC restore old level 1 handler restore A6 test RC address of device n address of name make length(devicename) 1 .. 7 push deVice number save disk size divide disk size by cluster size index to start of voltable get start word ex it if drv =0 exit if end of table exit if drv 4 > get stop word ok if top3 a ok if top3 4 compare start and stop 28 Sep 82 OBSAI 5840 085CI OC40 OB601 66BA OB58* 08 0854* OC 0850* 10 084A* 16 083A* 26 0836* 2A 0830* 30 0824* 3C 08621 60** 082A* 38 08641 4A2E 08681 67** OB6AI OC40 086EI 67F2 0868* 06 08701 41EF OB741 4242 08761 283C 087CI 6100 08801 66*'" OB821 4A98 08841 66** 08861 60** 0880* 06 08881 2018 088AI 67** 088CI OC42 08901 66** 08921 OC80 08981 66** 089AI 60"'''' 0890* OA PAGE - 36 089CI 43EF OBAOI 2219 OBA21 B081 OBA41 67** 08A61 C284 OBA81 8284 OBAAI 66F4 OB98* 12 OB84* 26 OB62* 48 OBACI 6000 OBA4* OA 089A'" 14 OB8A* 24 OB86* 28 OB801 5242 08821 OC42 OB861 66C4 OBB81 302E OBBCI EB48 08BEI OB8EI 2260 OBC21 43Ft OBC61 41EF OBCAI 2298 OBCCI 2358 08001 4A2E 08041 67** 08061 08061 2060 OBOAI 7007 080CI 2009 080EI 51C8 0804'" OC 08E21 6000 OA20* 01C6 OA16'" 0100 08E61 302E 08EAI 3200 08ECI 0641 D8FOI EB48 08F21 OBF21 2'060 OBF61 43FO OBFAI 22BC OCOOI 337C OC061 1341 OCOAI 342E OCOEI 4882 OC101 E98A OC121 2238 OC161 9282 OC181 2341 OC1C, 2F09 OC1EI 42A7 PAGE - 37 TPR: MON1!. TEXT AOO.W CMP.W BNE.S 0200 #4,00 #$200,00 LOOPVOL BREINIT BRA.S 8REINI2 0100 CHKMTBL TST.B BEQ.S CMP.W BEQ.S 10( A6 ) @1 #$100,00 BREINIT 0040 @1 LEA CLR.W MOVE.L LOOPTBL BSR BNE.S TST.L BNE.S BRA.S S40(A7),AO 02 #$EOOOOOOO,04 UNITISB @1 (AO )+ BREINI2 LOOPENO @1 (AO )+, DO LOOPENO #4,02 @2 #$FFFFOOOO, DO BREINI2 LOOPENO OOOA EOOO 0000 **** 0004 FFFF 0000 MONITOR 0100 *"'** 0015 0008 FF88 0000 0038 0004 OOOA FF88 FFFC "'''''''* 0008 0030 FF88 0000 0644 5249 5645 0004 0006 0008 0148 0018 MONITOR MOVE.L BEQ.S CMP.W BNE.S CMP.L BNE.S .. BRA.S Pege 022 if setwork then exit if volume table is empty unit:=O load mask repeat if not unitisblocked(unit) then exit if mtbl(unit) <> 0000 0000 else if mtbl(unit) <> 0000 0000 then if unit=4 then exit if mtbl(unit) <> FFFF 0000 else F'ILE: MONBEGN.TEXT @2 @3 LEA MOVE.L CMP.L BEQ.S ANO.L CMP.L BNE.S BREINI2 BRA LOOPENO AOO.W CMP.W BNE VALIOB7 MOVE.W LSL.W GETOTBL # MOVE.L LEA LEA . CPYOEVN MOVE.L MOVE.L CPYOEVE TST.B BEQ.S GETOT8L # MOVE.L MOVE.L ®1 MOVE.L 08F ®2 BRA SETTWGY MOVE.W MOVE.W AOD.W LSL. W GETOT8L # MOVE.L LEA MOVE.L MOVE.W MOVE.B MOVE.W EXT.W LSL.L MOVE.L SUB.L MOVE.L MOVE.L CLR.L FILE: MONBEGN.TEXT $100(A7),A1 (A1 )+,01 01,00 LOOPENO 04,01 04,01 @3 begin get next volt.ble entry if voltbl<>mtbl(unit) then REINIT end #1,02 #21,02 LOOPTBL 8(A6),OO #OEVNSHF,OO Al -120(A5),Al OEVNAME(Al,OO.W),Al $40-8(A7),AO ~AO (Al) AO +,4(Al) 10(A6 ) ®2 AO -120(AS),AO #ONTRYSZ/4-1,OO (Al )+, (AO)+ 00,@1 t, MVMTABL 8(A6),00 00,01 #$30,01 #OEVNSHF,OO AO -120(AS),AO 0(AO,00.W),A1 #$06445249, (A1 ) #$S64S,4( Al ) 01,6(Al) 8(A6},02 02 #4,02 $148,01 02,01 01, OEVJTBL(Al) Al,-\A7) -(A7 exit if end of voltable unit: =unit+l; until unit=21; address of device n address of name copy device name into device table if setwork then begin address of device 0 copy entry from dev# n to dev# 0 end make device number into ascii set device name to 6 ORIVEx deVice number times 16 set up jump table ptr save address of device n 28 Sep 82 TPR: MON1!. TEXT OC201 3F2E OC241 6100 OC281 201F OC2AI 0080 OC301 41EE OC341 oOFC OC381 2140 OC3CI 225F OC3EI 4A2E OC421 67 ...... OC441 302E OC481 5340 OC4AI 8038 OC4EI 6780 OC42'" OC OC501 60** OC521 43FA OC561 :2189 OC5AI 6000 OBAE* OOBO OAoC'" 0182 OC5EI 302E OC621 I;:B48 OC641 OC641 20SO OCS81 43FA OC6CI B3FO OC701 67EO OC721 302E OC761 EB48 OC781 OC781 20So OC7CI 72FF OC7EI 2181 OC821 204F OC841 303C OC881 4258 OC8AI 5~40 OC8CI 66FA OC50* 3C OBE4'" OOAA OA30'" 025E OC8EI 42A7 OC901 3F2E OC941 6100 OC981 2257 OC9AI 41EE OC9EI DOFC OCA21 303C OCA61 3208 OCA81 5340 OCAAI 66FA OCACI 225F OCAEI 4AB8 OCB21 67 ...... PAGE - 38 OCB41 OCBCI OCB2'" OCBEI OCBC'" OCC21 OCC41 OCC61 OCC81 OCC81 OCC81 OA40'" OCC81 OCCAI OCCEI OCoOI OC021 OC021 OC021 OC021 OC021 OC021 OC021 OC061 OC061 OCOCI OCOCI OCEOI OCE41 OCE61 OCEAI OCECI OCEEI OCF21 OCEC* OCF61 OCF81 OCF81 0008 MOVE.W BSR MOVE.L OR.L LEA Aoo.W MOVE.L MOVE.L TST.B BEQ.S MOVE.W SUB.W CMP.B BEQ.S ............ 2000 0000 FoFE 0040 0014 OOOA 0008 01B3 8(AS), -(A7) HoSKINIT (A7)+,00 #$20000000,00 -514( A6 ), AO #$40,AO 00,20(AO) (A7)+,A1 lO( A6 ) ®1 8(A6),00 #1,00 BOOToVC,oO CPyoEVE ... * ...... 0018 FE12 BRA.S TRYNJMP LEA MOVE.L BRA MVMTABL NJMPTBL,A1 Al,oEVJTBL(AO,oO.W) RoMTINIT 0008 REINIT 8(A6),00 #oEVNSHF,oO AO -120(A5), AO PJMPTBL,Al oEVJTBL(AO,oO.W),Al TRYNJMP 8( AS), DO #oEVNSHF,oO AO -120(A5),AO #-1,01 ol,oEVJTBL(AO,oO.W) A7,AO #oSKBLK12,oO #0, (AO)+ #1,00 ®2 iii MOVE.W LSL.W GEToTBL # MOVE.L LEA CMP.L BEQ.S REINIT J MOVE.W LSL. W GEToTBL MOVE.L MOVE.L MOVE.L MOVE.L MOVE.W (12 MOVE.W SUB.W BNE.S FF88 ......... * 0018 0008 . FF88 0018 0100 0008 FCCO FoFE 0040 002A 0144 MONITOR MVMTABL CLR.L MOVE.W BSR MOVE.L LEA Aoo.W MOVE.W (ill MOVE.W SUB.W BNE.S MOVE.L TST.L BEQ.S FILE: I'IONBEGN.TEXT 237C FFFF 0000 0010 60 ...... OA 42A9 0010 04 4E5E 2E9F 4E75 @2 .@3 .. - ~A7 ~ 8 AS , -(A7) GETMTBL (A7), Al -514( AS ), AO #$40,AO #MTBLSIZ/2,00 (AO )+, (AI )+ #1,00 (!II (A7 )+, Al $144 @2 MOVE.L BRA.S #SFFFFOOOO,lS(Al) (!I 3 CLR.L 16( AI) UNLK MOVE.L RTS A6 (A7 )+, (A7) Page start=O, stop=1582 restore address of device n if setwork then if device-1 = bootdyc then go cOP!:l device n to device 0 set up for a Profile without headers did we fail a Profile with headers unmount, init jump table ptr re-init the mount table push device number cop !:I (!Imtbl into Al cOP!:l mount table into heap pop (!Imtbl into Al make MEMORY: be #4: delete 4 bytes Trap to here if no PIA 0288 2E4A 210F 0008 2CSF 60BC NOCARo MOVE.L MOVE.L MOVE.L BRA.S A2,A7 t' ~A7 $8 A7 +,A6 cut back stack restore exception vector 3 restore A6 MVMTABL GETRoIR -- GET ROOT VOLUME AND INITIALIZE SYVIo ANO OKVIO -26 -30 days:arra!:l [0 .. 12] of integer heap top ; 4E56 FFE2 2060 FFF4 FF'E2 2060 1428 4882 6100 4A06 67"'''' 3F3C 6000 08 204A --_ FFFC 0001 ............ 0005 FBCO 43EO FFCA ....... ,"'" .. _,... GETROIR LINK GETNP # MOVE.L GETSYSC # MOVE.L MOVE.S EXT.W BSR TST.B BEQ.S MOVE.W BRA.S @1 # A6,#-30 -30(AS) -12(A5), -30(AS) AO -4(A5(,AO SYSUNT AO),02 mark (heahtop ) D2 FTCHOIR 06 @l #5, -( A7) INOXERR MOVE.L A2,AO AOORTHO Al LEA -54( AS ), Al get director!:l push error# 5 initialize thedate 023 28 Sap 82 OCF'CI 00001 00041 00041 00081 OOOAI OOOEI OOOEI 00121 00141 00181 00181 00181 001AI 001EI 00201 00221 PAGE TPR:MONll.TEXT 32A8 0014 43E8 0006 2060 F'F'04 2001 20E9 0004 # 2060 F'F'CC 2001 20E9 0004 # 2F07 3E3C 0050 4E45 2E1F 4A44 - 39 MONITOR 00241 66** 00261 4A43 00281 66** 002AI 4A42 002CI 66** 002EI OC41 00321 66** 00341 0(40 00381 67** 0032* 06 002C* OC 0028* liD 0024* 14 003AI 41EE 003EI 2248 00401 4259 00421 3:2FC 004S1 32FC 004AI 3:2FC 004EI 32FC 00521 32FC 00561 32FC 005AI 32FC 005EI 32FC 00S21 3:2FC 00661 32FC OOSAI 32FC 006EI 32FC 00721 0440 007S1 3400 00781 0242 007CI 66** 007EI 3D7C 007C* 06 00841 4242 008S1 00861 5442 00881 OC42 008CI 67** 008EI 9270 00921 6EF2 00941 0270 00981 E24A 009AI E949 009CI 0441 009EI E148 OOAOI E348 00A2, 0440 00A41 00A41 43EO 00A81 3282 OOAAI 008C * 1e 0038* 70 OOAAI 2BSE PAGE - 40 MOVE.W LEA GETSYV MOVE.L MOVE.L MOVE.L GETOKV MOVE.L MOVE.L MOVE.L TRAPTO MOVE.L MOVE.W TRAP MOVE.L TST.W FILE: MON8EGN.TEXT # # # • Cl2 03 @2 02 Cl2 #1,01 Cl2 #1980,00 LEA MOVE.L CLR.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W SUB.W MOVE.W ANO.W BNE.S MOVE.W -26{ A6 ), AO AO,Al (Al )+ #31, A1 + #28, Al + #31, Al + #30, Al + #31, Al + #30, A1 + #31, A1 + #31, A1 + #30, A1 + #31, A1 + #30, A1 + #31, A1 + #1900,00 00,02 #3,02 @3 MOVE.W #0,02 @4 AOO.W CMP.W BEQ.S SUB.W BGT.S . ADO. W LSR.W LSL. W AOO.W LSL.W LSL.W AOO.W AOORTHO LEA MOVE. W PUTNP 07BC F'F'E6 001F' 001C 001F 001E 001F' 001E 001F 001F 001E 001F 001E 001F 076C 0003 0010 F'FEA 001A 2000 2000 # CiS FFE2 FFF4 MONITOR # MOVE.L FILE: MONBEGN.TEXT OOBOI 4E5E 00B21 4E7S 00B4, 00B41 00B41 00B41 00B41 00B41 00B4, 00B41 00B41 00B41 00B41 00B41 00B41 00B41 00B41 00B41 " ' _ _N _ _ .'''''''~'''''''''_''~ UNLK RTS initialize syvid initialize dkvid 80 07, -(SP) #80,07 #5 (SP )+, 07 04 BNE.S TST.W BNE.S TST.W BNE.S CMP.W BNE.S CMP.W BEQ.S 0001 FFCA OLAST8T)AO),(Al) OVIO(AO ,A1 AO -44(A5),AO (A1 ), (AD )+ 4( A1 ), (AO )+ AD -52(A5),AO (A1 ), (AD )+ 4( A1 ), (AD )+ Page 024 CIS if year mod 4 0 then days[2]:=29 Ci3 #29, -22(A6) #2,02 #2S,02 @S 0(AO,02.W),01 @4 O( AO, 02. W), 01 #1,02 #4,01 01,02 #8,00 #1,00 00,02 A1 -54(A5),Al 02, (Al ) -30( AS) m:=O repeat m:=m+1 if m=13 then eKit d:=d-days[m] until d<=O d: '=d+days[m] month is 1..12 day is 1..31 year is 0 .. 99 re lease( heap top ) -30(AS). -12(AS) A6 . INCLUDE HAROOISK.TEXT FILENAME: HAROOISK PROCEDURE SETHOSK(OEV:INTEGER) stack 8 4 o Device number Return address Old AS ..o-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _' _ _ _ _ _ 28 Sap 82 00B41 00B41 OASC* 0348 00B41 4E5S 00B81 OC6E OOBEI 67** OOCOI 42A7 00C21 3F'2E OOCSI 6100 OOCAI 205F' OOCCI 1010 OOCE! 0240 00021 0040 00041 4EF'B OOOS* 02 00081 SOF'2 OOOAI SOF'O OOOCI 60** OOOEI 6-0** OOBE'" 20 OOEOI 43FA 00E4! SO*'" OOOC* 08 00E61 43FA OOEAI 60"'* OOOE* OC OOECI 43F'A OOEA* 04 00E4* OA OOF'OI 302E 00F'41 EB48 00F'61 00F'61 2060 OOF'A! 2189 OOF'EI 6000 OE021 OE02! PAGE - .41 OE02! OE021 OE021 OE021 OE021 20S0 OE061 EB48 OE081 2030 OEOCI SB** OEOE, 2040 OE101 4E75 OEOC* 04 OE121 205F' OE141 5848 OE16! 4EOO OE18, OE18! OE181 OC26* 01F'2 OE18! OEl8! 302F' OE1C, SlE4 OE1EI 4EOO OE201 4E7l OE221 OE221 42AF OE2S1 60** OE281 OE28t 4240 OE2At 102F OE2EI 6102 OE301 4EE8 OE341 OE34! 20SF' OE381 30BC OE3CI SOOO OE401 OE40! 4240 OE421 l02F' OE461 SlBA OE481 4EE8 OE4CI OE4CI SOES OE4E\ OE4EI 302F OE521 SlAE OE541 4EE8 OE58\ OE581 42SF' OE5CI SO** OE5E\ OE5EI OE5Et OOEE* 0070 OE5E\ SOOO OE62\ 6000 PAGE - 42 TPR: MONll. TEXT Page 025 Gets called during boot to setup the OEVJTBL for each device 0000 0007 ooolf s-~rHOSK LU.fK AS,#O #7, 8(A6) TRYMRK C1!rP. W BEQ.S CLR.L MOVE.W BSR MOVE. I,. TSTSTAT MOVE.B ANO.W AOO.W JMP -(A7) GETBASE (A7)+,AO IRB( AO ), DO #3,00 00,00 STAT JMP(OO) get the status port STATJMP BRA.S BRA.S BRA.S BRA.S TSTSTA'T TSTSTAT TRYPIP TRYCRV case case case case **** TRYMRK LEA BRA.S MJMPTBL,Al SETDISK "'*** TRYPIP LEA BRA.S PJMPTBL,Al SETOISK *"'** TRYCRV LEA CJMPTBL,Al 0008 F'BAA 0003 00** 0008 FF88 Oin8 **** MONITOR = SETOISK MOVE.W LSL. W GETOTBL # MOVE. I,. MOVE. I,. BRA ~~:~ t push device number 8: 9: A: B: corvus off, pippin on the way corvus on the way p ipp in off, p ipp in ready cable disc, corvus ready 8(A6), DO #OEVNSHF,OO AO -120(A5),AO Al,OEVJTBL(AO,OO.W) INITXIT ; GETJTBL moves the address of jump table into AO for device number in DO F'ILE: HAROOISK.TEXT GETJTBL returns to call+4 if address of jump table is negative ~ F'F'88 0018 ;tETJTBL GETOTBL MOVE. I,. LSL. W . MOVE. I,. BMI.S MOVE. I,. RTS .-# MOVE. I,. AOO.W JMP AO -120(A5),AO #DEVNSHF, DO ~f\l~T~J..J~Q'P2~_~U, DO OO,AO (A7 )+, AO #4,AO (AO) HARD DISK ENTRY POINTS 0004 0006 0008 0004 0012 OOF'F' **** 0008 0008 0004 OOOC 0006 }~9.SKrN~ i MivE. W 4(A7),00 BSR GETJTBL JMP (AO) NOP ; error return from GETJTBL CLR.L 6(A7) BRA.S CSZEXIT OSKREAO CfR.W DO MOVE.B 8(A7),00 GETJTBL BSR JMP 4(AO) ; error return from GETJTBL OISKERR MOVE.L 18(A7),AO MOVE.W #$FF', (AD) BRA OISKIOX OSKWRT, ~LR.W DO MOVE.B 8( A7), DO BSR GETJTBL JMP S(AO) ; error return from GETJTBL .~RA.S OISKERR :~::g"I$~Z"~OVE. W 4(A7), DO BSR GETJTBL JMP 12( AD) error return from GETJTBL CLR.W 6(A7 ) BRA.S CSZEXIT CORVUS JUMP TABLE **** **** MONITOR CJMPTBL BRA BRA F!LE: HAROOISK.TEXT COSKINIT COSKREAO get ®RC indicate error 28 Sap 82 OE66! OE6A! OE6E! DE6E! OE6E! DE60* OE6E! OE6E, OE72! OE74! OEOO* OE7t! OE5C* OE26* OE7E! OE80! OE82! OE64* OE84! OE84! OE88! OE68* OE8t! OE8C! OE90! OE6C* OE94! OE94! OE9A! OE9C! OE9C! OE9C! OE72* OE9C! OE9E! OEA2! OEAG! OEA8! OEAEI OEB21 BRA BRA 6000 **** 6000 **** Page D26 CO$KWRT COSKCSZ FUNCTION COSKINIT(OEV:INTEGER):LONGINT OOOE COSKINIT 4E56 0000 61** 2D7C 0000 52E4 OOOA 007C 4E5E 20 56 205F 544F 4EOO 0020 LINK BSR.S MOVE.L A6,#0 PRTINIT #21220, 10(AS) INITXIT UNLK AS CSZEXIT MOVE.L AOO.W JMP (A7)+,AO #2,A7 (AO) return disk size CDSKREAO 41FA **** 6000 **** 0024 LEA BRA COSKRO,AO DISKIO go do Corvus disk read LEA BRA COSKWR,AO DISKIO go do Corvus disk write MOVE.W BRA #3,6(A7) CSZEXIT CDSKWRT 41FA ***'" 6000 **** 0028 CDSKCSZ 3F7C 0003 0006 60E2 return cluster size (ie shift count) PROCEDURE PRTINIT 28 42A7 3F2E 6100 205F 1l7C 4228 10BC OEB~ 117C OEBCI 4E75 OEBEI OEBEI OEBE! OEBEI OEBE! OEBE! OEBE! OEBE! OEBE! OEBE! OEBEI OEBEI OEBEI PAGE - 43 OEBE! OEBE! OEBE! OEBE! OEBE! OEBE! OEBEr OEBEr OEBE! OEBE! OEBE! OEBE! OEBE! OEBE! OE92* OE8A* OEBE! OEC2! OEC6! OECA! OECCI DEDOI OED4, OED6! OED8! OEDCr OEEO\ OEE2\ OEE6\ OEEA\ OEECr OEFOr OEF41 OEF61 OEF8r OEF81 TPR: MON11. TEXT PRTINIT CLR.L MOVE.W BSR MOVE.L MOVE.B MOVE.B MOVE.B MOVE.B RTS 0008 FACE OOOA 0060 0018 0018 007C 0010 -~A7 ~ 8 A6 , -( A7) GETBASE (A7)+,AO #$OA, PCR( AO ) #$00, DDRA( AO ) #$18, ORB( AO ) #$7C, DDRB( AO) PROCEDURE DISKIO (VAR RC: INTEGER; DRIVE: INTEGER; BLKCOUNT: I_ONGINT; BLKNUMBER:LONGINTj VAR BUFFER); Stack: , MONITOR 22 20 16 12 (JRC Drive Number Block Count Block Number 8 4 ®Buf'fer Return Address Old A6 Count B lk Addr TempCount Address of driver Device number Hardware base for device 3 Hardware base for device n FI~HARDDISK.TEXT o -4 -12 -16 -20 -22 -26 -30 Note: 2F07 get via base address set ctrl CA2 pulse mode strobe set port A bits to input en=true, dir=in, cmd=false set port B bits 0,l,7=in, 2,3,4,5,6=out , -8 002C 0034 4E56 40E7 2048 4240 102E 3040 42A7 3FOO 6100 2DSF 42A7 3F3C 6100 201F 2()40 BOAE 66'+<>1< 7001 push device number FFE2 7000 FFEC OISKIO OOOC FFEA FA98 FFE2 0003 FA8A FFE6 FFE2 # incoming block number is split into dev# and blk# LINK MOVEM.L MOVE.L CLR.W MOVE.B MOVE.W CLR.L MOVE.W BSR MOVE.L CLR.L MOVE.W BSR MOVE.L MOVE.L CMP.L BNE.S MOVE.L TRAP TO MOVE.L A6,#-30 01-03, -(A7) AD, -20(A6) 00 12(A6),OO DO, -22( A6 ) -( A7 00,- A7) GETBASE (A7 )+, -30(A6) -( A7) #3,-(A7) GETBASE (A7)+,DO 00, -26\ A6 ) -30(A6 ,00 ®O #1,00 108 07, -( SP ) 1 save address of driver form device number push device number n pushes hardware base push device number 3 pushes hardware base Bu i It in port ? yes, set port busy 2S Sep 82 OEFAI 3E3C OEFEI 4E45 OFOOI 2E1F OEF4'" OC OF02, 422E OF061 206E OFOCI 2D6E OFl21 2D6E OFlSI 4AAE OF1CI 67"'''' OFlEI 206E OF241 2F2E OF2S1 2F2E OF2CI 3F2E OF301 4S6E OF341 2F2E OF3S1 2F2E OF3CI 206E OF401 4E90 PAGE - 44 OF421 20GE OF461 4A2S OF4AI 68** OF4CI 202E OF501 90AE OF541 01AE OF5S1 E1S8 OF5AI OOSO OF5CI OlAE OF601 60B6 OF4A* 16 OFlC* 44 OF621 202E OFG61 BOAE OF6AI 66** OF6CI 4?SO OF6EI OF6EI 2F07 OF701 3E3C OF741 4E45 OF761 2E1F OF6A* DC OF781 4COF OF7CI 4E5E OE3E* 0140 OF7EI 205F OFSOI DEFC OFS4, 4jEDO OFSGI OFSGI OFSGI OFS61 OFS61 OFSGI OFS61 OF861 OFS61 OFS61 OFS61 OFS61 OFSGI OF8GI OFS61 OFS61 OF86, OFS61 OFS61 OES6* 0100 OFS61 OF861 4E56 OFSAI 206E OFSEI 5390 OF901 206E OF941 1D7C OF9AI 106E PAGE - 45 OFAO, OFA61 OFACI OFB21 OFB6, OFBAI OFBCI OFCOI OFC21 OFC61 OFCAI OFCCI OFDOI OFD41 OFD61 OFDAI ........._ .. .... ~ 106E 106E 1l7C 0890 43EE 7003 0810 67FA 1159 51C8 7000 51C8 0810 66FA 4228 0800 ,_~l_'~ TPR: MONU. TEXT OOGC • # # OOOC 0010 FFFC OOOC FFFS OOOS FFF4 FFFC FFFC FFFO FFE2 001G 0014 FFFC FFFS FFF4 FFEC MONITOR @o CLR.B MOVE.L MOVE.L MOVE.L @1 TST.L BEQ.S MOVE.L MOVE.L MOVE.L MOVE.W PEA MOVE.L MOVE.L MOVE.L JSR FILE: HAROOISK.TEXT 0016 0001 FFFO FFFC FFFS FFF4 FFE6 FFE2 OOGC # # # # OOOE 0012 MOVE.W TRAP MOVE.L Page 027 -108,07 #5 (SP )+, 07 12! AGj 16 A6 , -4!A6j 12 A6 ,-S A6 S(AG),-12 A6 -4( A6 ) Ci2 -4(A6), -16(A6) -30(AG). -(A7) 2T6 r~A7l 20 A6 ,- A7 -4 A6 -8 A6 , -( A7) -12\A6~' -(A7) -20 AG ,AO (AD MOVE.L TST.B BMI.S MOVE.L SUB.L AOO.L LSL. L AOO.L AOO.L BRA.S 22(AG),AO l(AO) @2 -lG(AG),OO -4(A6(,00 DO, -S A6) #S,OO 00,00 DO, -12(A6) @1 MOVE.L CMP.L BNE.S MOVE.L TRAP TO MOVE.L MOVE.W TRAP MOVE.L -26f AG~, DO -30 A6 ,DO Ci3 #0,00 lOS 07, -( SP) #10S,07 #5 (SP)+,07 make block number valid count:=blockcount blk:=blocknumber addr:=Cibuffer while count <> 0 do begin tempcount:=count push hardware bese for device n push CiRC push drive number push (i)count push blk push addr get address of driver call the driver get @RC if RC > 127 then exit x:=tempcount-count blk:=blk+x eddr:=addr+S12*x end Bu i It in port ? yes, set port free MOVEM.L (A7 )+, 01-03 UNLK A6 OISKIOX MOVE.L ADD.W JMP (A7 )+, AO #18,A7 (AO) PROCE~URE COSKRO (BASEAODR:LONGINT; VAR RC: INTEGER; DRIVE: INTEGER; VAR COUNT:LONGINT; BLKNUMBER:LONGINTj VAR BUFFER); Stack: 26 22 20 .. 21 16 12 .. 15 S 4 0 base address @RC drive @Count Block Number @Buffer Return Address Old A6 pt r to word 0 .. 255 word ptr to long long pt r CDSKRD FFFC 0010 001A 0032 FFFC 0015 FF'FD MONITOR LINK MOVE.L SUB.L MOVE.L MOVE.B MOVE.B FILE: HARDDISK.TEXT OOOF FFFE OOOE FFFF ~OFF 001S 0003 FFFC 0001 DSKRD1 0008 FFF4 FFFE 0000 0018 0003 ... _ .....-.,,__ • DSKRD2 DSKRD3 MOVE.B MOVE.B MOVE.B BCLR LEA MOVE.L BTST 8EQ.S MOVE.B DBF MOVE.L DBF BTST BNE.S MOVE.B BSET A6,#-4 16(A6),AO #1, (AO) 26(A6),AO #$32, IOCMO( A6 ) 21(A6),IODRV(A6) 15(A6),BLOCKL(A6) 14(A6),BLOCKH(A6) #$FF, DORA ( AD ) #3, ORB( AO ) IOCMD(A6), A1 #CMOSIZE-1,DO #1, IRB( AO ) DSKRD1 (A1 )+, ORA(AO) DO,DSKR01 #13,00 00,DSKRD2 #0, IRB( AO) DSKRD3 #0, DORA( AO ) #3, ORB( AO ) get @count decrement count get base address set command to read set drive number set block Isb set block msb port A bits to output bidir drvr to output @command string length-1 of command string ready ? move each byte delay appro x 30us bus direct ion in ? port A bits to input bidir drvr to input 28 Sep 82 OF'oEI OF'EOI 0F'E41 0F'E61 OF'EAI OF'EEI OF'F'OI 0F'F'41 OFF'61 OF'F'AI OF'F'C, 10001 10021 10041 10061 10081 100AI 100CI 100EI 10101 1014, 10181 1018, 10181 101S1 10181 10181 10181 10181 10181 10181 10181 10181 101S1 10181 10181 10181 10181 10181 PAGE 10181 OE8E. 10181 101CI 10201 10221 10261 102CI 10321 10381 103EI 10441 10481 104CI 104EI 10521 10541 10581 10SCI 10S01 1062, 10SS1 106AI 10SC, lOSE, 1070, 1072, 1074, 107S1 1078, 107AI 107CI 1080, 10841 1086, 108AI 108EI 10901 10941 10981 109AI 109EI 10AO, 10A41 lOASI 10AAI 10AEI 10AEI 10AEI 10AEI 10B2, 10B61 lOBAI 10BEI TPR:MONll.TEXT ~2S0 0810 67F'A 1028 226E 3280 226E 703F 0810 67F'A 41E8 1200 1200 1200 1200 1200 1200 1200 1200 51C8 SOOO 0001 oSKR04 0008 0016 0008 0001 oSKR05 0008 oSKRoS F'F'EE "'' ' ' II< CLR.L BTST BEQ.S MOVE.B MOVE.L MOVE.W MOVE.L MOVE.L BTST BEQ.S LEA MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B oBF' BRA 00 #1, IRB(AO) oSKR04 IRA(AO),oO 22(AS),Al ~O, (Al ) 8(AS),A1 #DSKBLK/8-1, DO #1, IRB( AO ) oSKR05 IRA AO),AO AO , Al + AO , A1 + AO , A1 + AO , A1 + AO , Al + AO , A1 + AO , Al + AO , A1 + oO,oSKRoS F'I NI SH PROCEDURE CoSKWR Pag. 028 ready ? get status byte into DO return status as RC address of block buffer length-1 of block ready ? ®input reg move each byte (BASEAooR:LONGINT; VAR RC:INTEGER; DRIVE: INTEGER; VAR COUNT:LONGINT; BLKNUMBER:LONGINT; VAR BUF'F'ER); Stack: 26 22 20 .. 21 16 12 .. 15 8 4 - 46 01SA 4iE56 20SE 5390 20SE 107C 106E lOSE 106E 117C 0890 43EE 7003 0810 S:7F'A 1159 SlC8 0810 67F'A 43E8 206E 703F' 1298 1298 1298 1298 1298 1298 1298 1298 SlC8 20SE 7000 S1C8 0810 S6F'A 4228 0800 4280 0810 67F'A 1028 226E 3280 6000 MONITOR F'F'F'C 0010 001A 0033 0015 OOOF' OOOE OOF'F' 0003 F'F'F'C 0001 0008 FF'F'4 0001 0008 0008 F'FEE 001A F'F'F'E 0000 0018 0003 0001 0008 0016 "'''''''''' F'ILE: HARooISK.TEXT F'F'F'C F'FF'o F'FF'E F'F'F'F' 0018 AS,#-4 LINK MOVE.L 16(A6),AO SUB.L #l,(AO) MOVE.L 2S(A6),AO MOVE.B #$33, 10CMo( AS) MOVE.B 21! AS ~' IOoRV( A6 ) MOVE.B 15 A6 ,BLOCKL~AS~ MOVE.B 14 A6),BLOCKH AS MOVE.B #$F'F', oDRA~AO) BCLR #3,ORB(AO LEA IOCMD(AS), A1 MOVE.L #CMoSIZE-1,DO oSKWRT2 BTST #1, IRB( AO) BEQ.S DSKWRT2 MOVE.B (A1)+,ORA(AO) oBF 00,oSKWRT2 DSKWRT3 BTST #1, IRB( AO ) BEQ.S oSKWRT3 LEA ORA(AO),A1 MOVE.L 8(AS),AO MOVE.L #OSKBLK 18 -1, DO OSKWRT4 MOVE.B AO +, A1 MOVE.B AD +, Al MOVE.B AD +, A1 MOVE.B AD +, A1 MOVE.B AO +, A1 MOVE.B AO +, A1 ~ MOVE.B AO +, A1 MOVE.B AO +, A1 ) OBF 00,OSKWRT4 MOVE.L 26(A6),AO MOVE.L #13,00 OSKWRT5 oBF' OO,oSKWRTS oSKWRT6 BTST #0, IRB( AO) BNE.S DSKWRT6 MOVE.B #0, DORA ( AO ) BSET #3, ORB( AO ) CLR.L DO OSKWRT7 BTST #1, IRB( AO ) BEQ.S OSKWRT7 MOVE.B IRA(AO),OO MOVE.L 22( A6 ), Al MOVE.W DO, (A1) i;~~::::.';::,;;:~-~~,?~:.:>..:[JN I SH "'''''''''' "'''''''''' "'''''''''' ""''''''' ptr to word 0 .. 255 word ptr to long long CoSKWR , 6000 6000 6000 6000 o base address @RC driv. ®Count Block Number @Buffer Return Address Old A6 PIPPIN JUMP TABLE (headers) PJMPTBL BRA BRA BRA BRA POSKINIT POSKREAO PDSKWRT PDSKCSZ get (ilcount decrement count get base address set command to write set drive number set block lsb set block msb port A bits to output bidir drvr to output ®command string length-l of command string ready ? move each byte ready ? ®output reg address of block buffer length-1 of block move each byte get base address delay appro x 30us bus direct ion in ? port A bits to input bidir drvr to input ready ? get status byte into DO return status as RC 28 Sap 82 10BEI PAGE 10BEI 10BEI 10C21 10C61 lOCAl 10CEI 10CEI lOCEI lOCO* lOBO'" 10CEI lOCEI 10021 10061 100EI 10B4* 10E21 10E21 lOE61 10B8'" 10EAI lOEAI 10EEI 10C4* 10F"21 10F"21 10F"61 10C8* 10F"AI 10F"AI 10F"EI 10CC* 10BC* 11021 11021 11081 110CI 110CI 110CI 110CI 11131 lilA' 111CI 111CI 111CI l11CI lllEI 11201 11241 11281 112AI 112AI 112AI 112AI TPR: MON11. TEXT 47 MONITOR ; PIPPIN JUMP TABLE (no headers) LE: HAROOISK.TEXT , 6000 6000 6000 6000 NJMPTBL BRA BRA BRA BRA "''''** **"'''' **** *>Ie** PDSKINIT NOSKREAO NOSKWRT PDSKCSZ F"UNCTION POSKINIT(OEV:INTEGER):LONGINT OOOE OOlE POSKINIT 4E56 6100 21D7C 6000 002E 0000 F"OCS 0000 2560-0-00A ro9C LINK BSR MOVE.L BRA A6,#0 PRTINIT #9568, 10(A6) INITXIT LEA BRA PDSKRO,AO OISKIO go do Pippin disk read LEA BRA POSKWR,AO OISKIO go do Pippin disk write LEA BRA NOSKRO,AO DISKIO go do Pippin disk read LEA BRA NDSKWR,AO OISKIO go do Pippin disk write MOVE.W BRA #3, 6( A7) CSZEXIT .BYTE 0,5,10,15,4,9,14,3,8,13,2,7,12, 1,6,11 MOVEQ AND.B ANO.W AOD.B RTS #-SI0,01 00,01 #$OF,OO INTRLV(DO),D1 return disk size POSKREAD 41F"A *"''''''' 6000 F"006 0032 POSKWRT 41F"A "'**'" 6000 roCE 002E NDSKREAD 41F"A "''''** 6000 FOC6 0032 NOSKWRT 41F"A "'III""" 6000 roBE 0036 0046 POSKCSZ 3F7C 0003 0006 6000 ro74 00 05 OA OF" 04 -09 DE 03 08 00 02 07-Ut 01 06 OB . , INTRLV I 72F"0 C200 0240 OOOF" 023B 00E6 4E75 REMAP return cluster size (ie shift count) 9:1 INTERLEAVE = $F"O mask high 4 bits mask low 4 bits add in remapped low 4 bits j- lOBC 0008 =-- -F'I N002 MOVE. B #$08, ORB(AO) 112~ 4228 0018 _ MOVE.B #$00, OORA(AO) PAGE - 48 MONITOR: ___FILd HAROOISK. TEXT 11321 11361 11381 113CI 113EI 11401 11421 1140* 11461 11481 114EI 11521 11561 115AI 115CI 11601 11641 11661 11661 11661 11661 11681 116AI 116CI 11701 11721 11741 116E'" 11781 117CI 11821 11861 118AI 118EI Page 0810 66F"A 1228 4200 B202 66"'''' 103C 04 4210 117C 1140 lOBC 0810 67FA 4228 10BC 4E75 WF"B1 0001 0008 0055 OOF"F" oarg-0008 0010 0001 SNOR1 WF"NB1 0018 0018 en=true, dir=in, cmd=true set port A bits to input BTST BNE.S MOVE.B CLR.B CMP.B BNE.S MOVE.B #1, ORB(AO) WF"BI IRA(AO),Ol DO 02,01 SNORI #$55,00 wait for busy MOVE.B MOVE.B MOVE.B MOVE.B BTST BEQ.S MOVE.B MOVE.B RTS #$00, ORB( AO ) #$F"F", DORA ( AO ) DO, ORA( AO ) #$10, ORB( AD) #1, ORB(AO) WF"NBI #$00, OORA( AD) #$18, ORB( AO ) en=true, dir=out, cmd=true set port A bits to output send reply 00 or 55 en=true, dir=out, cmd=false wait for not busy MOVE.L 8SR TST.B BNE BSR TST.B BEQ #1,02 F"IN002 DO COPY6 F"IN002 DO OSKERR try to find state 01 get port A in 01 did pippin return state requested? set port A bits to input en=true, d ir= in, cmd=fa lse ; 7401 61CO 4AOO 6HOO 61B8 4AOO 6700 OOOA IOBC 117C 4:3EE 1151 1159 1151 STATal "''''*''' **"'''' COPY6 0010 ~OFF F"F"FA 0078 0008 0078 001S MOVE.B MOVE.B LEA COPY6LP MOVE.B MOVE.B MOVE.B #$10, ORB( AO ) #$F"F" , DORA (AO ) -6(A6),Al !A1 ), NHS(AO) Al ~+, ORA( AO ) A1,NHS(AO) if state 01 was found then go send command bytes else try to find state 01 again if state fr1 was not found then return disk error en=true, d ir=out, cmd=false set port A bits to output 029 28 Sep 82 11921 11961 119AI 119EI 11A21 11A61 11AAI 11AEI 11B21 11B61 11B81 11B81 11B81 11B81 11BEI 11C41 11CAI 11001 11021 11021 11021 PAGE TPR: MON11. TEXT 1159 1151 1159 1151 1159 1151 1159 1151 1159 4E75 MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B RTS 0008 0078 0008 0078 0008 0078 ODDS 0078 0008 A1 Al A1 Al A1 Al Al Al Al Page 030 +,ORA(AO) ,NHS(AO) +, ORA(AO) ,NHS(AO) +,ORA(AO) ,NHS(AO) +,ORA(AO) ,NHS(AO) +,ORA(AO) ; i , 1068 1068 1068 1068 4E75 0008 0008 0008 ODDS -GETSTAT MOVE.B MOVE.B MOVE.B MOVE.B RTS FFF'cFFFII FFFC FFFJ=":' IRA!AO j' -4!A6) IRA AO ,-3 A6j IRA AO ,-2 A6 IRA AO),-l A6 ; - 49 11021 206E 11061 4250 11081 206E 110CI 422E 11EOI 422E l1E41 lOSE llEAI l02E llEEI 1200 11FOI 4A6E llF41 67** llF61 6100 11F4>1< 04 11FAI 1041 11FEI 107C 12041 107C 120AI 6100 120EI 7402 12101 6100 12141 4AOO 12161 6700 121AI 4E75 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 121CI 10E4>1< 0138 121CI 303C 12201 60>1<>1< 10F4>1< 012E 12221 4240 1220>1< 02 12241 4E56 12281 3040 122CI 206E 12301 5390 12321 619E 12341 1068 PAGE - 50 123AI 12401 12461 124CI 12501 12521 12561 125CI 12621 12681 1250>1< 126EI 12701 12741 1068 1068 1068 4A6E 6A>I<>I< 6100 1068 106S 1068 1068 1C 7403 4AAE 6600 MONITOR 0016 001A FFFA FFFB OOOE OOOF FILE: ~IiJrnOISK.TEXT STRTRO F~ FFF8 FF24 FFFO OOOA -rrF'E 0004rrtF FF5A (il FFl8 >1<*>1<>1< MOVE.L 22(A6 ),AO CLR.W (AO) MOVE.L 26(A6),AO MOVE.B #0, PCMNO( A6 ) MOVE.B #0, BLKH( A6 ) MOVE.B 14~ A6 ~,BLKM( A6 ) MOVE.B 15 A6 ,DO MOVE.B 00,01 TST.W -8(A6 ) (!ll BEQ.S .REMAP BSR MOVE.B MOVE.B MOVE.B BSR MOVE.L BSR TST.B BEQ RTS 01, BLKL( AS) #10, RETRY~A6 ~ #4,THRESH A6 STAT01 #2,02 FIN002 DO OSKERR PROCEDURE PoSKRo set RC to zero get base address set command to read set block number lsb of block number replace block number set retry count set threshhold get 01 byte and send read command get 02 byte disk error if not in read state (BASEAooR:LONGINT; VAR RC:INTEGER; DRIVE: INTEGER; VAR COUNT:LONGINT; BLKNUMBER:LONGINT; VAR BUFFER); Stack: 26 22 20 .. 21 16 12 .. 15 8 .. 4 o -6 -8 -28 0001' FFE4 FFF8 0010" 0008WC MONLTOR ptr to word 0 .. 255 word ptr to long long POSKRo MOVE.W BRA.S #1,00 LOSKRO headers := true NoSKRO MOVE.W #0,00 headers := false LINK MOVE.W MOVE.L SUB.L BSR MOVE.B rILE: HAROOISK.TEXT AS,#-28 00,-S(A6) 16(A6),AO #1, (AD) STRTRO IRA(AO), -4(A6) get Iilcount decrement count try read first time get pippin status MOVE.B MOVE.B MOVE.B TST.W BPL. S BSR MOVE.B MOVE.B MOVE.B MOVE.B IRA! AO), -3( A6 ~ IRA AD), -2~ A6 I RA AD), -1 A6) -2(A6 ) RONRES STRTRO MOVE.L TST.L 8NE #3,02 LoSKRO OOOS-mO 0008-~mE 0008 TrFF FFFE FF7E:=::= 0008 FFFC OOOg-FFFO OOOB. FFFE OOO'BFFFF RONRES FFF'C "'*** base address IilRC drive IilCount Block Number IilBuffer _. Return Address Old A6 Command Buffer Header flag Header Buffer IRTOfTSI try read second time get pippin status IRA AD ,-3 A6 IRA AD ,-2 A6 IRA AD ,-1 A6 -4( A6) OSKERR _w _ _ _ _ _ •• ,._ _•_ _,_ _. . . . . ._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ •_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 28 Sep 82 TPR: MON11. TEXT 12781 4201 127AI 41E8 127EI 4A6E 12821 67** 12841 43EE 12881 343C 128CI 128CI 10lO 128EI B101 12901 12CO 12921 1010 12941 BI0l 12961 12CO 12981 51CA 1282* 18 129CI 129CI 226E 12AOI 343C 12A41 12A41 1010 12A61 BI0l 12A81 12CO 12AAI 1010 12ACI BI01 12AEI 12CO 12BOI 51CA 12B41 4AOl 12B61 67** 12B81 4A6E 12BCI S7** 12BEI 4A2E 12C21 6A** 12C41 7404 12C61 1276* 0050 1218* OOAE 1176* 0150 12C61 206E 12CAI 4402 12CCI 3082 12CEI 12C2* OA PAGE - 51 12BC* 1286* 10AC* 1016* 12CEI 12001 12021 120S1 12081 12081 12081 12081 120CI 120EI 12E21 12E81 12ECI 12F21 12FSI 12F81 12FCI 12FEI 12FC* 13021 13061 130CI 13121 13161 13181 131CI 131EI 13201 13241 132AI 132EI 13301 13341 13381 133CI 13401 13441 13481 132E* 134CI 13501 13541 13581 135CI 13601 13641 13681 __ "' 0008 F"F"F8 FFE4 0009 CLR.B LEA TST.W BEQ.S LEA MOVE.W 01 MOVE.B EOR.B MOVE.B MOVE.B EOR.B MOVE.B OBF (AO), DO 00,01 OO,)A1)+ (AO ,DO 00,01 ~O, (Al )+ 02,REAOHOR MOVE.L MOVE.W 8(AS),Al #8LKSIZE,02 MOVE.B EOR.B MOVE.B MOVE.B EOR.B MOVE.B OBF TST.B BEQ.S TST.W BEQ.S TST.B BPL. S MOVE.L (AO), DO 00,01 00,)A1)+ (AO ,DO 00,01 DO, (Al )+ 02,REAOLP 01 FINISH -8(AS) FINISH -22( A6 ) FINISH #4,02 MOVE.L NEG.B MOVE.W 22( AS ), AO 02 02, (AO) i Page 031 INIT CSUM IRA(AO),AO -8(A6 ) RSKPHOR -28( A6 ), A1 #HORSIZE,02 REAOHOR FFF2 GET BYTE FROM DISK INCLUDE IN RUNNING CHECKSUM AND STORE IT IN BUFFER GET BYTE FROM DISK INCLUDE IN RUNNING CHECKSUM AND STORE IT IN BUFFER REPEAT UNTIL DONE RSKPHDR 0008 OOFF REAOLP FFF2- --- FFF~ FFEA...".,.- OSKERR 001"§: MONItOR 10 16 0222 0:2B8 4E5E 205F OEFC 0016 4£00 get address of BUFFER ; read the data b~tes GET BYTE FROM DISK INCLUDE IN RUNNING CHECKSUM AND STORE IT IN BUFFER GET BYTE FROM DISK INCLUDE IN RUNNING CHECKSUM AND STORE IT IN BUFFER REPEAT UNTIL DONE set RC error is 128 .. 255 FILE: HAROOISK.TEXT FINISH , UNLK MOVE.L AOO.W JMP A6 (A7 )+, AO #22,A7 (AO) I , 20SE 4250 20SE 1107C 4:22E 106E 102E 1200 4A6E 67** S100 04 11041 lD7C 107C 6100 7404 6100 4AOO 67A6 10BC 117C 4A6E 67** 43EE 303C 1151 1159 1151 1159 51C8 1e 2:26E 303C 1151 1159 1151 1159 51C8 7406 __ __ "~''' 0016 001A 0002 FFFB OOOE OOOF ITf~ me FFF8 FEIC FFFO OOOA E"f'"F"E 0004 F"F"F'F FE52 FElO 0010 OOFF 001;8 FFF8 FFE4_ 0009 .. 0078 0008_ 0078~~ 0008= FFE~ oooa OOF!='_ 0078 OOOS_ 0076 000"6 FFEE ' STRTWRT MOVE.L CLR.W MOVE.L MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B TST.W BEQ.S BSR 22(A6),AO (AO) 26(A6),AO #2, PCMNO( A6 ) #0, BLKH( AS) 14~ AS ~' BLKM( AS ) 15 AS ,DO 00,01 -8(AG) @1 REMAP MOVE.B MOVE.B MOVE.B BSR MOVE.L BSR TST.B BEQ MOVE.S MOVE.S TST.W SEQ.S LEA MOVE.W HORLOOP MOVE.S MOVE.S MOVE.B MOVE.B OBF 01, BLKL( A6 ) #10, RETRY~ A6 ~ #4,THRESH A6 STATOl #4,02 FIN002 DO OSKERR #$10, ORS( AO ) #SFF,OORA(AO) -8( AG ) WSKPHOR -28(A6),Al #HORSIZE,OO WSKPHOR MOVE.L MOVE.W WRTLOOP MOVE.B MOVE.B MOVE.B MOVE.B OBF MOVE.L 8(AS),Al #BLKSIZE,OO !A1~' NHS(AO) A1 +, ORA ( AO ) A1 ~,NHS( AO ) (A1 +, ORA(AO) OO,WRTLOOP #6,02 ~1 (AI ~Al l' NHS ( AD ) set RC to zero get base address set command to write/verif~ set block number lsb of block number replace block number set retr!:j count set threshhold get 01 b!:jte and send write command get 04 b~te disk error if not in write/verify state en=true, d ir=out, cmd=f'alse set port A bits to output send out header b!:jtes +,ORA(AO) A1 ,NHS(AO) (Al +,ORA(AO) OO,HORLOOP get address of' BUFFER send out data bytes 28 Sep 82 136AI 136EI 13701 PAGE TPR: MONIL TEXT 6100 ~E 4AOO .C • 6700 ID4 - 52:'J.t.ONI TOR 13741 4IE75-:-13761 13761 13761 13761 13761 13761 137GI 13761 137GI 13761 13761 13761 137GI 13761 13761 13761 13761 13761 13761 13761 13761 13761 10EC* 028A_ 13761 303C QOOI 137AI GO** 10FC'" 0280 137CI 4240 137A* 0:2 137EI 4IE56 F"FE4 13821 3D40F'FF8 13861 41EE F'FE4 138AI 4281 138CI 20Cl 138EI 30Cl 13901 30Fe aooo 13941 20CI 13961 20Cl 13981 20CL_ 139AI 123C 0080 139EI 202E 0008 13A21 2040 13A41 E25a 13A61 6·4*'" 13A81 343C 01FF 13ACI 1018 13AEI B101 13BOI 51CA F'FFA 13B41 60** 13A6* DIE 13BGI 343C 007F 13BAI 201S 13BCI B181 13BEI 51CA F"F"FA 13C21 3001 PAGE - 5:rMONITOR 13C41 13C61 13B4* 13C81 13CAI 13CCI 13001 13041 13061 130AI 130EI 13E21 13E41 13E81 13E2* 13ECI 13EEI 13F21 13F61 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13F AI 13FAI 13FAI 13F AI 4841 B141 12 3F01 B317 105F 20GE 5390 6100 G100 4A6E GA*'" 6100 G100 08 7407 4AAE 6600 6000 BSR TST.B BEQ FILE: Pase 032 FIN002 DO OSKERR ~ROOISK.TEXT RTS PROCEDURE POSKWR (BASEAOOR:LONGINT; VAR RC:INTEGERj DRIVE: INTEGER; VAR COUNT:LONGINTj BLKNUMBER:LONGINT; VAR BUFFER); Stack: 26 22 20 .. 21 16 12 .. 15 8 4 0 -6 base address @RC drive CiCount Block Number @BuHer Return Address Old A6 Command BuFFer Header Flag Header BuFFer -8 -28 POSKWR MOVE.W BRA.S NOSKWR MOVE.W ·#0,00 LOSKWR LINK MOVE.W LEA CLR.L MOVE.L MOVE.W MOVE.W MOVE.L MOVE.L MOVE.L MOVE.B MOVE.L MOVE.L ROR.W BCC.S MOVE.W MOVE.B EOR.B OBF BRA.S ®1 ®2 Ci3 MOVE.W MOVE.L EOR.L OBF MOVE.W F1LE: HAROOISK.TEXT #1,00 LOSKWR ptr to \.liard 0 .. 255 \.liard ptr to long long headers := true headers A6,#-28 DO, -8(A6) -28(A6),AO 01 01,~AO~+ 01, AO + #$8000, (AO)+ r 01, 01, !AO AO + 01, AD + #$80,01 8( A6 ), DO OO,AO #1,00 @2 #511,02 (AO)+,OO 00,01 02,111 @4 :~ False @header buFFer sign bit on in byte 6 indicates csum csum For header $80 CSUM on byte boundary #127,02 (AD )+, DO 00,01 02,®3 01,00 CSUM on even \.liard boundary long csum SWAP EOR.W 01 00,01 \.liard csum FEF2 FDCE MOVE.W EOR.B MOVE.B MOVE.L SUB.L BSR BSR TST.W BPL. S BSR BSR 01,-(A7} 01, (A7) (A7 )+, -17(A6) 16( A6 }, AO #1, (AD) STRTWRT GETSTAT -2(A6 ) WRTNRES STRTWRT GETSTAT FFFC FED2 FED6 WRTNRES MOVE.L TST.L BNE BRA ®4 f"F"EF DOlO F'FOO fpDC F1'F"E -f Final csum in byte 11 get @count decrement count try write first time write complete get pippin status try write second time write complete get pippin status #7,02 -4{ A6 } OSKERR FINISH j equates For Marksman interFace OOFC 0000 0000 0000 0000 .0000 0000 0000 0000 7001 0000 000 a 0010 0018 0020 0028 0030 0038 ; reset MRKRES REGO REG1 REG2 REG3 REG4 REGS REG6 REG7 For breadboard is thru 139 where as 4-port card uses PB6 on PIA2 EQU $FC7001 ; address to read td reset marksman EQU SOD j offset to read/write register 0 EQU $08 EQU $10 EQU $18 EQU S20 EQU $28 EQU $30 EQU S38 28 Sep 02 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FAI 13FEI 14021 14061 PAGE 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0040 0048 0050 0058 0060 0068 0070 0078 0000 0001 0002 0003 0004 0005 0007 OOAB REGS REG9 REG A REGB REGC REGD REGE REGF XPOVRUN CDOVRUN XPCPT XPBUSY CDCPT IMTBUSY DTRQST IDFIELD EOU EOU EOU EQU EQU EQU EQU EOU EQU EOU EOU EOU EOU EOU EQU EQU P_g_ 033 $40 $48 $50 $58 $60 $68 $70 $78 a 1 2 3 4 5 7 $AB MARKSMAN JUMP TABLE ; 6000 6000 6000 6000 - 54 140AI 140AI 140AI 140AI 207C 14101 0890 14141 4E71 14161 OSDO 141AI 203C 14201 5380 14221 6,6FC 14241 4E75 14261 14261 14261 13FC* 002A 14261 14261 4E56 142AI 4E71 142CI 2D7C 14341 6000 1400* 0038 14381 14381 41FA 143CI 6000 1404* 003C 14401 14401 41FA 14441 6000 1408* 0040 14481 144BI 3F7C 144EI 6000 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 14521 143A* 0018 PAGE - 55 14521 14561 145AI 145EI 14601 14621 14661 14681 146AI 146EI 14721 TPR: MON11. TEXT 4E56 202E B1FC 42Bl 3200 83FC 3401 E05A 43EE 12FC 4219 ----- **** *"'** **"'''' *"''''''' MONITOR MJMPTBL BRA BRA BRA BRA FILE: HARDDI SK. TEXT MDSKINIT MDSKREAO MOSKWRT MDSKCSZ , OOFC 7001 0006 MDSKRES MOVE.L #MRKRES,AO BCLR #6, (AO ) NOP BSET #6, (AO ) MOVE.L-·#500000,DO #1,00 SUB.L BNE. S (ill RTS 0006 0007 A120 get count for 2 seconds wait for marksman to reset FUNCTION MDSKINIT(DEV:INTEGER):LONGINT MOSKINIT 0000 0002 OC10 OOOA FA46 @1 LINK NOP MOVE. L BRA A6,#0 LEA BRA MDSKRD,AO OISKIO go do Marksman disk read LEA BRA MDSKWR,AO OISKIO go do Marksman disk write MOVE.W BRA #6,6(A7) CSZEXIT #134160, 10(A6) INITXIT return disk size MOSKREAD "'*** FA80 MOSKWRT "''''*''' FA78 MOSKCSZ 0006 0006 FA2E return cluster size (ie shift count) PROCEDURE MDSKRD (BASEAODR:LONGINT; VAR RC:INTEGER; DRIVE: INTEGER; VAR COUNT: LONGINT; BLKNUMBER:LONGINT; VAR BUFFER); Stack: 26 22 20 .. 21 16 12 .. 15 8 4 o -1 -9 -10 MONITOR FFF6 OOOC 0028 0006 FFF6 005B base address @RC drive @Count Block Number @Buffer Return Address Old A6 reg9 ptr to word 0 .. 255 word ptr to long long reg1 regO FILE: HARDDISK.TEXT MDSKRD LINK MOVE.L DIVS CLR.L MOVE.W OIVS MOVE.W ROR.W LEA MOVE.B MOVE.B A6,#-10 12(A6),OO #40,00 01 00,01 #6,01 01,02 #8,02 -10(A6),A1 #S58, (A1 )+ #0, (Al)+ get Block Number DO msw is .Sector, DO Isw is quotient 01 msw is Head, regO reg1 01 lsw is Cy I inder read command drive number 28 Sep 82 14741 12C2 14761 12C1 14781 4841 147AI 12C1 147CI 4840 147EI 12CO 14801 4219 14821 12F'C 14861 7428 14881 9400 148AI 206E 148EI B490 14901 60** 14921 2410 1490* 02 14941 2602 14961 12C2 14981 4219 149AI 206E 149EI 203C 14A41 5380 14A61 66** 14ABI 6100 14ACI SOEC 14A6* 06 14AEI 0810 14B21 66F'0 14B41 303C 14B81 11A1 14BCI 5140 14BEI 6AF'8 14COI 14COI 226E 14C41 303C 14C81 OC42 14CCI 67** 14CEI 303C 14021 14CC* 04 14021 1210 14041 B210 14061 66F'A 14081 0801 PAGE - 56 140CI 140EI 14E21 14E41 14E41 14E81 14EAI 14EEI 14F'01 14F'41 14F'61 14F'AI 14F'CI 15001 15021 15061 15081 150CI I50EI 15121 15141 15181 151AI 151EI I4E8* 15201 15241 ISlE'll 15281 152AI 152CI 15301 15321 140C* 15321 15341 15361 153BI 153CI 153EI 15421 15441 15441 15461 154AI 154EI 15521 15541 1552* 15561 -- ............ TPR: MON11. TEXT 0005 0010 001A 0001 B207 (ill 3 @1 F'F'60 0005 @12 0048 0000 0008 01F'F' 0001 113 OOOF' 0001 02,03 02, (A1 )+ #0,(A1)+ 26(A6),AO #111111, DO #1,00 (112 MoSKRES (i13 copy left to counter reg8 -- number of sectors to read reg9 -- unused get basa address get count for 1 second BTST BNE.S MOVE.W MOVE.B SUB.W BPL.S #IMTBUSY, (AO ) @1 #REG9,00 -(Al),O(AO,oO) #REG1, DO wait for IMTBUSY to go false . MOVE. L 8(A6),A1 MOVE.W #511, DO CMP.W " #1,02 (ill BEQ.S MOVE.W #15,00 reg4 head number regS reg6 reg7 sector number unused number retries left:=40-sector# if left > count then left:=count if timeout then reset marksman offset to last register send next byte to disk subtract offset between registers done ? ; -ge"t address of buffer beq.s btst bne.s @5 #oTrqst_,ol @11 nope, assume error well, how about data ready? sorry, look aga in CMP.W BEQ.S MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L OBF' BRA.S #1,02 @4 REGF'(AO),ol ol,(A1)+ REGF'(AO),ol 01, (Al )+ REGF'(AO),ol ol,(A1)+ REGF'(AO),ol 01, (A1 )+ REGF'(AO),ol 01, (A1)+ REGF'(AO),01 01, (A1)+ REGF'(AO),ol 01, (A1 )+ REGF'(AO),Dl 01, (A1)+ 00,1)9 @10 @4 MOVE.B oBF' REGF'( AO ), (A1 )+ 00,@4 @10 SUB.W BNE.S MOVE.L SUB.L #1,03 @3 16( A6), A1 02, (A1) ®9 0078 0078 0078 0078 0078 0078 F'F'C8 0078 F'F'F'A (J2 cylinder MSB cy 1 inder LSB #IMTbusy,ol 0078 0010 4240 226E 0016 1028 0008 oeoo 0005 6F"'''' 4400 0,2 3:280 ...-,...,'.. MOVE.L MOVE.B MOVE.B MOVE.L MOVE.L SUB.L BNE.S BSR BRA.S DO, #0, !A1 A1 !++ #5, A1 + #40,02 00,02 16(A6),AO (AO),02 @O (AO),02 reg2 reg3 1st read same the next time? nope, keep looking busy still ok? 0078 54 10lD BOlO 66F'A 0800 0005 66F'4 0800 0004 67EE ....",_ 02, (Al)+ 01, (Al )+ 01 ol,(A1)+ DO move. b cmp.b bne.s btst F'ILE: HARooISK.TEXT 67** 0801 0007 66EE OC42 67** 0348 22Cl 0348 22C1 0348 22Cl 0348 22Cl 0348 2:2Cl 0348 2:2C1 0348 2:2Cl 0348 2:2C1 51C8 60** 36 12E8 51C8 08 5343 6698 226E 9591 MOVE.B MOVE.B SWAP MOVE.B SWAP MOVE.B MOVE.B MOVE.B MOVE.L SUB.B MOVE.L CMP.L BLT.S MOVE.L (ill 1 0005 MONITOR Page 034 @5 ®7 (AO),Ol (AO).01 (ill 1 move.b cmp.b bne.s btst bne.s btst beq.s #IMTbusy,DO ®5 #COcpt, DO ®5 CLR.W MOVE.L MOVE.B CMP.B BLE.S NEG.B DO 22(A6),A1 REG1(AO),00 #5,00 ®B DO MOVE.W ~O, ~ AO~, DO AO ,DO copy the data from fifo to buffer decr the counter ; count:=count-left get va 1 id status ®S (A1) wait for valid Cocpt then wait for command completion get the address of status get the status byte if status is bad then negate the byte copy status to user 28 Sep 82 TPR:MON11.TEXT 15581 6000 F074 155C, 155C, 155C, 155C, PAGE - 57 MONITOR 155C, 155CI 155CI 155CI 155C, 155CI 155CI 155CI 155CI 155CI 155CI 155CI 155CI 155CI 155CI 1442* OllA 155CI 4E56 15S01 202E 15S41 81FC 15681 4281 156AI 3200 15SCI 83FC 15701 3401 15721 E05A 15741 43EE 15781 12FC 157CI 4219 157EI 12C2 15801 12C1 15821 4841 15841 12C1 15861 4840 15881 12CO 158AI 12FC 158EI 4219 15901 7428 15921 9400 15941 20SE 15981 B490 159AI SO** 159CI 2410 159A* 02 I59EI 2602 15AOI 12C2 15A21 4219 15A41 20SE 15A81 203C 15AEI 5380 15BOI 66** 15B21 6100 15B61 SOEC 15BO* 06 15B81 0810 15BCI 66FO 15BE, 303C PAGE - 58 15C21 15C61 15C81 15CAI 15CE, 15021 1506, 15081 150C, 1506* 150C, 150E, 15EO, 1SE2, 15E6, 15E81 1SEC, 1SEEI 1SEEI 15F21 1SF41 15F61 15FAI 15FC, 16001 16021 16061 1608, 160CI 160E, llA1 5140 SAF8 22SE 303C OC42 67** 303C FINISH PROCEDURE MOSKWR (BASEAOOR:LONGINTj VAR RC: INTEGER; ORIVE:INTEGERj ; FILE: HAROOISK.TEXT VAR COUNT: LONGINT; BLKNUMBER:LONGINT; VAR BUFFER); Stack: 26 22 20 .. 21 16 12 .. 15 8 4 o FFF6 OOOC 0028 MOSKWR 0006 FFF6 0060 OOAB 0010 CiO 001A 0001 B207 ®13 ®1 FE5S 0005 0048 MONITOR 0008 01FF 0001 ®3 OOOF 0001 0078 0078 0078 0078 0078 @11 ®9 ptr to word 0 .. 255 word ptr to long long A6,#-10 12(A6),00 #40,00 01 00,01 #6,01 01,02 #8,02 -10( AS ), A1 #$60, (A1)+ MOVE.L MOVE.B MOVE.B MOVE.L MOVE.L SUB.L BNE.S BSR BRA.S 02,03 02, ~A1 ~+ #0, A1 + 26(A6),AO #111111, DO #1,00 ®12 MOSKRES ®13 copy left to counter reg8 -- number of sectors to write reg9 -- unused get base address get count for 1 second #IMTBUSY, (AO ) ®1 #REG9,00 wait for IMTBUSY to go false MOVE.B SUB.W BPL.S MOVE.L MOVE.W CMP.W BEQ.S MOVE.W - ( A1 ), 0 ( AO, DO ) #REG1,00 ®2 8(AS),A1 #511, DO #1,02 ®11 #15,00 send next b!;lte to disk subtract offset between registers done ? get address of buffer move.b cmp.b bne.s btst beq.s btst bne.s ~AO~,Ol AO ,01 ®ll #IMTbusy,Ol ®5 #OTrqst_,Ol ®ll CMP.W BEQ.S MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L #1,02 ®4 (A1)+,01 01, REGF( AO ) (A1)+,01 01, REGF( AO ) (A1)+,01 01, REGF( AD) (A1)+,01 01, REGF( AD) (A1)+,01 01, REGF( AO ) BTST BNE.S MOVE.W FILE: HAROOISK.TEXT ®2 base address (IIRC drive ®Count Block Number ®Buffer Return Address Old A6 LINK MOVE.L OIVS CLR.L MOVE.W OIVS MOVE.W ROR.W LEA MOVE.B MOVE.B MOVE.B MOVE.B SWAP MOVE.B SWAP MOVE.B MOVE.B MOVE.B MOVE.L SUB.B MOVE.L CMP.L BLT.S MOVE.L ®12 0000 04 1210 8210 6GFA 0801 0005 67** 0801 0007 66EE OC42 67** 2219 03C8 2219 03C8 2219 03C8 2219 03C8 2,219 03C8 BRA r #0, !A1 02, A1 + 01, A1 + 01 01,(A1)+ DO ~O, (A1 )+ #IOFIELO, (A1)+ #0, (A1)+ #40,02 00,02 16(A6),AO (AO),02 ®O (AO),02 get Block Number DO msw is Sector, DO Isw is quotient 01 msw is Head, 01 Isw is C!;II inder regO reg1 reg2 reg3 write command drive number cy 1 inder MSB cylinder LSB reg4 head number regS regS reg7 sector number id field unused left:=40-sector# if left > count then left:=count if timeout then reset marksman offset to last register fetch status and wait for settling unbusy? yes, assume error else, look at data ready sorry, st i 11 not ava i lab Ie copy the data from fifo to buffer 28 Sep 82 16121 2219 16141 03C8 16181 2219 161AI 03C8 161EI 2219 16201 03C8 16241 51C8 16281 60** 15F2* 36 162AI 1159 162EI 51C8 1628'" 08 16321 5343 16341 6,698 16361 226E 163AI 9>591 163CI 15E6'" 54 163CI 1010 163EI BOlO 16401 66FA 16421 0800 16461 66F4 16481 0800 164CI 67EE PAGE - 59 164EI 164EI 4240 16501 226E 16541 1028 16581 OCOO 16SCI 6F"'''' 165EI 4400 16SC* 02 16601 3280 16621 6000 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 16661 3800 16681 2041 166AI 4A42 166CI 67"'''' 166EI 6100 16721 lOCO 16741 5342 16761 66F6 166C'" OA 16781 4E75 167AI 167AI 167AI 167AI 4840 167CI 3800 167EI EA48 16801 0240 16841 3FOO 16861 42A7 16881 3FOO 168AI 6100 168EI 20SF 16901 4280 16921 301F PAGE - 60 16941 16981 169AI 169CI 169CI 169CI 169CI 16AOI 16A21 16A61 TPR: MONU. TEXT MOVE.L MOVEP.L MOVE.L MOVEP.L MOVE.L MOVEP.L OBF BRA.S (A1)+,01 01, REGF ( AO ) (Al)+,Ol 01, REGF(AO) (Al)+,01 01, REGF ( AO ) 00,(19 (110 (14 MOVE.B OBF (Al )+, REGF(AO) 00,(14 (110 SUB.W BNE.S MOVE.L SUB.L #1,03 (13 16(A6),Al 02, (A1 ) 0078 0078 0078 FFC8 0078 FFFA 0010 (15 0005 0004 MONITOR move.b cmp.b bne.s btst bne.s btst beq.s FILE: HAROOISK.TEXT (17 0016 0008 0005 (i8 FC6A ~AO ~' DO AO ,DO (15 #IMTbusy,OO (15 #COcpt, DO (15 P_ge 036 decr the counter count:=count-left get val id status make sure of va 1 id COcpt and IIIait for command complete CLR.W MOVE.L MOVE.B CMP.B BLE.S NEG.B DO 22(A6),Al REGl (AO ), DO #5,00 118 DO get the address of status get the status byte if status is bad then MOVE.W BRA DO, (A1 ) FINISH copy status to user negate the byte . INCLUDE MONIO.TEXT FILENAME MONIO REGISTERS A7 A6-A2 A1 AO 07 06-00 stack pointer unused ptr to pia scratch ptr system globals input paramters and scratch EXECORVR -- does the unit read from an exec file i EXECORVR "'''''''''' (11 MOVE.W MOVE.L TST.W BEQ.S BSR MOVE.B SUB.W BNE.S (12 RTS 00,04 01,AO 02 ®2 FROM EXEC ~O, (AO)+ #1,02 ®1 save the unit number save the address ; OOOF F2eA MONITOR UNITOEV SWAP MOVE.W LSR.W ANO.W MOVE.W CLR.L MOVE.W BSR MOVE.L CLR.L MOVE.W FILE: MONIO.TEXT ANO.W LSL. W RTS 0244 001F ES4C 4E75 DO 00,04 #S,OO #$F, DO ~O, A7) -(A7 DO, - A7) GETMTBL (A7)+,AO DO (A7)+,00 device number #$lF,04 #2,04 unit -l numb~r"'4 ; 48E7 8880 6108 3030 4000 8070 4002 CHECKCO MOVEM.L BSR.S MOVE.W OR.W 00/D4/AO, -(A7) UNITDEV 0~AO,04~,00 2 AO,04 ,DO set cc=NE if dsk or mem is mounted 28 Sep 82 16AAI 16AEI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16BOI 16B21 16B41 16B61 16B81 16BCI 16COI 16C21 16C41 16CAI 16CEI 16001 16021 16061 16081 160CI 160EI 4COF" 0111 4E75 Page MOVEM.L (A7)+,OOID4/AO RTS Input: DO 03 Output: DO 03 04 OS 06 , 61C8 C940 3C04 E09C 3A30 OC45 67** 2F"04 0285 48E7 4267 3iF06 6100 3B1F" 4COF" E9AO OA97 16E~ 0283 16E61 OA83 16E81 3e30 16EQ 0286 16F"21 E9AE 16F"41 OC9F" 16F"61 3830 16F"AI E15C 16F"CI 0244 17001 3030 17041 4E75 16CO* 44 PAGE - 61 17061 17081 170CI 17101 17121 17141 17141 17141 17141 17181 171AI 171AI 171AI 171A! 171EI 17201 17201 17201 17201 17221 17241 17261 17261 17261 17261 17281 172AI 172AI 172AI 172AI 172AI 172AI 172AI 172AI 172AI 172CI 172EI 17301 17321 17361 17381 173CI 173CI 173CI 173CI 173CI 173CI 173CI TPR:MONll.TEXT 0000 F"FF"F 0000 1FF"F 8080 F"77A 0101 0000 7FF"F" 0002 0000 1FF"F" 0000 0007 0002 MONITOR Note: equal to unitnumber*256 block number positive byte word MSB reflects write protect if -1 then memory drive number volumestart+blocknumber lastblock of this volume ward ward ward long lang if starting block for this volume is $F"F"F"F" then it is memory GETINF"O BSR UNITOEV EXG 04,00 MOVE.W 04,06 ROR.L #8,04 MOVE.W 0(AO,OO),05 CMP.W #$F"F"FF,05 BEQ.S NOTOISK MOVE.L 04, -( A7) ANO.L #$lFFF,05 MOVEM.L OO/AO, - (A7 ) CLR.W -(A7 ) MOVE.W 06,-(A7) BSR HOSKCSZ MOVE.W (A7 )+,04 MOVEM.L (A7 )+, OO/AO LSL. L 04,05 AOO.L .. (A7),05 #$7F"F"F" , 03 ANO.L AOO.L. 03,05 MOVE.W 2(AO,OO),06 ANO.L #$1FF"F",06 LSL.L 04,06 AOO.L (A7)+,06 MOVE.W 0(AO,OO),04 ROL.W #3,04 #7,04 ANO.W MOVE.W 2(AO,OO),OO RTS OO=device number, 04=unit number*4 04=device number, OO=unit number*4 save device number for call to HOSKCSZ move dev# to high byte of lang get strt cluster push rotated dev# to bias 05 and 06 make strt cluster a long push device number get cluster size as shift count strtblock:=strtcluster*clustersize bias strtblock by dev# make blocknumber a long ·volumestart+blocknumber get last cluster make last cluster a long lastblock:=lastcluster*clustersize bias strtblock by dev#, pop dev# compute drv move top 3 bits to bottom and mask off the junk bits 4-15 MSB reflects write protect F"ILE: MONIO.TEXT 3003 C1FC 0200 00B8 0144 3605 4E75 NOTOISK MOVE.W MULS AOO.L MOVE.W RTS 303C 0001 4E75 COERROR MOVE.W RTS 03,00 #FBLKSIZ,DO $144, DO 05,03 save strt block for mem r/w compute it in bytes for them set 03 negative 10 ERROR ; #IBAOBLK,OO WRITE PROTECT ERROR , 303C 0003 4E75 WRTPRT . MOVE. W #IBAOMOO, DO RTS 4241 4240 4E75 COBUSY MOVE.W MOVE.W RTS #0,01 #INOERR,OO ioresult:=inoerror 4240 4E75 CDC LEAR MOVE.W RTS #INOERR,OO ioresult:=inoerror , , Input parameters: DO 01 02 03 , 4A42 68E6 4M3 68E2 6100 FF7C 4M3 6800 ......... '" COREAO TST.W BMI TST.W BMI BSR TST.W BMI un it number *256 buffer address number bytes block number 02 CDERROR 03 COERROR GETINFO 03 MEMREAO byte long word word is length neg ? is block neg? set 05 to strt and 06 to last memory ? register useage: DO 01 02 03 used by dskread AO used by dskread ®buffer A1 used by dskread length left length of fractional read 037 28 Sap 82 173CI 173CI 173CI 173CI 173CI 173EI 17401 PAGE TPR: MONll. TEXT 04 05 06 3602 E04A E24A - 62 17421 0282 17481 2005 174AI 0082 174CI 5380 174EI BC80 17501 63C2 17521 4A82 17541 67** 17561 4267 17581 2FOF 175AI 3F04 175CI 2F02 175EI 2F05 17601 2F01 17621 6100 17661 301F 17681 4AOO 176AI 6BA8 1754* 16 176CI 0243 17701 67** 17721 OA82 17741 BC45 17761 639C 17781 E18A 177AI 0482 177CI 0282 177EI 9EFC 17821 204F 17841 2F08 17861 4267 17881 2FOF 178AI 3F04 178CI 2F3C 17921 2F05 17941 2F08 17961 6100 179AI 301F 179CI 205F 179EI 2241 17AOI 1208 17A21 5343 17A41 66FA 17A61 DEFC 17AA\ 4AOO 17ACI 6BOO 1770* 3E 17BOI 4240 17B21 4E75 17B41 17B41 17B41 17B41 17B41 17841 PAGE - 63 17B41 17841 173A* 17841 17B61 17881 17B81 17881 17B81 17BAI 178CI 178EI 17COI 17C21 17C41 17C61 17CAI 17BC* 17CCI 17CEI 17001 17021 17041 17061 17081 1700* 170CI 17EOI MONITOR drv number curr block last block MOVE.W LSR.W LSR.W FILE: MONIO.TEXT 0000 007F ANO.L MOVE.L AOO.L SUB.L CMP.L BLS TST.L BEQ.S CLR.W MOVE.L MOVE.W MOVE.L MOVE.L MOVE.L BSR MOVE.W TST.8 BMI F6C4 01FF ANO.W BEQ.S AOO.L -. CMP. W BLS LSL. L AOO.L AOO.L SUB.W MOVE.L MOVE.L CLR.W MOVE.L MOVE.W MOVE.L MOVE.L MOVE.L 8SR MOVE.W MOVE.L MOVE.L MOVE. 8 SU8.W BNE.S AOO.W TST.8 BMI 0200 0000 0001 F690 0200 FF66 CORWXIT MOVE.W RTS 02,03 #8,02 #1,02 selve low 9 bits number of blocks to read #$7F,02 05,00 02,00 #1,00 00,06 COERROR 02 (it forming start+blockcount-1 reading beyond the end of vol? i any full blocks to read? A7 A7,- A7 -( 04,- A7 02,- A7 05,- A7 01,- A7 OSKREAO (A7)+,OO DO CDERROR allocate RC push ®RC push drv push block count push block number push @buffer read error ? #$1FF,03 CORWXIT 02,05 05,06 COERROR #8,02 02,02 02,01 #OSKBLK,A7 A7,AO AO, - A7) -(A7 A7,- A7 04,- A7 #1,- A7 05,- A7 AO,- A7 OSKREAO (A7)+,00 (A7)+,AO 01,A1 (AO )+, (A1)+ #1,03 ®3 #OSK8LK,A7 DO COERROR compute next starting block reading beyond the end of vol? ®buffer:=®buffer+512*blockcount save AO (address of fractional buff) allocate RC push ®RC push drv push block count push block number push address of fractional buff restore AO (address of fractional buff) read error ? #INOERR,OO ioresult:=inoerror register useage: MONITOR DO 01 ; 02 FILE: MONIO.TEXT start and counter AO @buffer A1 length left from to 03 -- starting block 007A 2040 2241 MEMREAO MOVE.L MOVE.L , 2.009 E248 64** 3002 67EE 5340 1208 51C8 FFFC 60E4 OE 3002 £648 67** 5340 2208 2208 51C8 FFFA OA 0242 0007 600C _, _ _ _ _ ..''''..... __ 'L''''.....''' _ _ ~ OO,AO 01,A1 ; ; from = ($144) + b Ik*512 to = ®buffer shared by mem rlw to do the move MOVEMEM MOVE.L LSR.W BCC.S MOVSLOW MOVE.W BEQ SU8.W @1 MOVE. 8 OBF BRA Al,OO #1,00 MOVFAST 02,00 CORWXIT #1,00 (AO)+,(A1)+ 00,@1 CORWXIT first check dest for word boundary we assume source is ! MOVFAST MOVE.W LSR.W BEQ.S SUB.W @1 MOVE.L MOVE.L 08F 02,00 #3,00 @2 #1,00 ~ AO AO +, ~ A1 A1 ~++ 00,®1 word boundary, move quads @2 #7,02 MOVSLOW ANO.W BRA t, byte boundary, move bytes any quads ? Page 038 28 Sap 82 '17E21 17E21 17E21 17E21 17E21 17E21 17E21 17E21 17E21 17E21 17E41 17E61 17E81 17E81 17E81 17E81 17EAI 17EEI 17FOI 17F41 17F81 17FAI 17FCI 17FEI 18021 18021 18021 PAGE 18021 18021 18021 '18021 18021 18021 18021 18021 18021 18061 18081 180AI 18101 18121 18141 18161 18181 181CI 181EI 18201 18221 18241 18261 18281 182CI 182EI 18301 18341 18381 18381 18381 18381 183CI 18401 18441 18481 184CI 184CI 184CI 184CI 18501 18521 18561 18SAI 185CI 18SCI 185CI 185CI 18601 18621 18641 18661 18661 18661 18661 PAGE 186AI 186CI 186CI 186EI 18721 18741 18761 18781 TPR: MON1L TEXT register useage: DO 01 02 03 start and counter AO ®buHer Al length left starting block from to EMrmITE 2240 2041 6000 MOVE.L MOVE.L BRA = 00,A1 01, AO MOVEMEM to ($144) + blk*512 from = ®buffer 02 COERROR 03 COERROR GETINFO 03 MEMWRITE DO WRTPRT is , 4A42 6BOO 4M3 6BOO 6100 4M3 6BE6 4A40 6BOO FF28 FF22 FEBA FFlA COWRITE TST.W BMI TST.W BMI BSR TST.W BMI TST.W BMI , - 64 MONITOR is block neg? memory ? register useage: FILE: MONIO.TEXT DO 01 02 03 04 05 06 0642 E04A E24A 0282 2005 0082 5380 BC80 6300 4267 2FOF 3F04 2F02 2F05 2F'01 6100 301F 4AOO 6BOO 6000 length neg ? AOO.W LSR.W LSR.W ANO.L MOVE.L AOO.L SUB.L CMP.L BLS CLR.W MOVE.L MOVE.W MOVE.L MOVE.L MOVE.L BSR MOVE.W TST.B BMI BRA 01FF 0000 007F FEFA F616 FEE2 FF7A used by dskwrt ®buffer length l'jltt length of write drv number curr block last block #511,02 #8,02 #1,02 #$7F,02 05,00 02,00 #1,00 00,06 COERROR i A7 A7,- A7 -( 04,A7 02,- A7 05,- A7 01,- A7 OSKWRT (A7)+,00 00 COERROR CORWXIT AO Al used by dskwrt used by dskwrt round up to nearest block multiple number of blocks to read forming start+blockcount-1 reading beyond the and of vol? allocate RC push ®RC push drv push block count push block number push ®buHer read error ? DRIVER TRANSFER TABLE j 6000 **** 6000 **** 6000 **** 0000 0000 6000 *"""'" ORVRTBL BRA BRA BRA . WORD BRA , 4A29 0006 6AFA 4A29 0002 1340 0002 4E75 PUT ROOATA WROATA UNITCLR 0,0 UNITBSY ROUTINE TO PUT A BYTE TO PIA TST.B BPL.S TST. B MOVE.B RTS OUTCSR(A1) PUT OUTOATA(A1) 00,OUTOATA(A1) wait till ready reset ready flag send 10 byte of DO ROUTINE TO GET A BYTE FROM PIA j 4A29 0004 6AFA 1011 4E75 GET , - 303C 0005 65 MONITOR TST.B BPL.S MOVE.B RTS INCSR(A1 ) GET INOATA(A1 ),00 wait for data avail get data and reset flag FORCED IORESULT OF LOST UNIT FOR UNIT I/O TO APPLE NO APPLE MOVE.W FILE: MONIO.TEXT #ILSTUNT,OO RTS 4E75 NOAPPL2 E048 OC40 0002 62F2 4240 4£75 LSR.W CMP.W BHI.S MOVE.W RTS #8,00 #2,00 NOAPPLE #INOERR,DO get unit number into lower byte unit 1 or 2 ? ioresult:=O if unitwrite to unit 1 or 2 '--------------------------------------- Page 039 28 Sap 8:2 TPR:MONll.TEXT 18781 18781 18781 61E2 187AI E148 187CI 610E 187EI 4E75 18801 18801 18801 18801 61CA 18821 E048 18841 61C6 18861 4E75 18881 18881 18881 18881 2001 188AI E198 188CI 61BE 188EI El98 18901 61BA 18921 E198 18941 61B6 18961 E198 18981 61B2 189AI 3002 189CI E158 189EI 61AC 18AOI E158 18A21 61A8 18A41 3003 18A61 E158 18A81 61A2 18AAI E158 18ACI 619E 18AEI 2041 18BOI 4E75 18B21 18B21 18B21 184A* 0068 18B21 5840 18B41 6100 FOE6 18B81 6,600 FE66 18BCI 4AB8 0118 18COI 67A4 18C21 61BC PAGE - 66 MONITOR 18C41 18C61 18C81 18CAI 18CCI 18CEI 18CEI 18CEI 1842* 18CEI 18001 18041 18081 180CI 180EI 18EOI 18E21 18E21 18E21 183A* 18E21 18E41 18E81 18ECI 18FOI 18F41 18F61 18F81 18FAI 18FEI 19001 18F8'" 19021 19041 19061 190AI 190AI 190AI 183E* 190AI 190CI 19101 19141 19181 191CI 19201 , GET IORESULT FROM APPLE INTO DO AND RETURN GETRSLT BSR LSL.W BSR RTS GET #8,00 GET get high byte get low byte SEND 10 COMMAND AND UNIT NUMBER ; SENOCMO BSR LSR.W BSR RTS , PUT #8,00 PUT send 10 command byte get unit number into lower byte send unit number SEND HEADER: address count blocknumber SENOHOR MOVE.L ROL. L BSR ROL.L BSR ROL. L BSR ROL.L BSR MOVE.W ROL.W BSR ROL.W BSR MOVE.W ROL. W BSR ROL. W BSR MOVE.L RTS 01,00 #8,00 PUT #8,00 PUT #8,00 PUT #8,00 PUT 02,00 #8,00 PUT #8,00 PUT 03,00 #8,00 PUT' #8;00 PUT D1,AO send 4 byte address high byte first low byte last send 2 byte count h 19h byte low byte send 2 byte blocknumber high byte low byte UNIT BUSY UNITBSY ADD.W BSR BNE TST.L BEQ BSR FILE: MONIO.TEXT 6196 E148 6192 BSR LSL. W BSR MOVE.W BRA noo 60AA #4,00 CHECKCO COBUSY $118 NO APPLE SENOCMO GET #8,00 GET 00,01 GETRSLT setup 10 command send 10 command and unit number get high byte get low byte get IORESULT and return UNIT CLEAR 008C 5,240 6100 FOCA 6600 FE 50 4AB8 0118 6788 61AO 6096 UNITCLR AOD.W BSR SNE TST.L SEQ BSR BRA #1,00 CHECKCO CDC LEAR $118 NOAPPLE SENOCMO GETRSLT setup 10 command send 10 command and unit number get IORESULT and return READ DATA STREAM 00A8 5440 6100 6600 4AB8 6700 618A 6190 60** 4A29 6AFA 1001 08 5342 64F4 6000 ROOATA FOB6 FE40 0118 FF74 0004 @1 @2 FF70 AOD.W BSR BNE TST.L BEQ BSR BSR BRA.S TST.B BPL.S MOVE.B #2,00 CHECKCD COREAO $118 NOAPPLE SENOCMD SENOHOR @2 INCSR( A1 ) @1 INOATA(A1), (AO )+; SUB.W BCC.S BRA #1,02 ®1 GETRSLT setup 10 command send 10 command and unit number send header and setup AO wait for data avail get data and reset flag dec count get 10RESULT and return WRITE DATA STREAM OOCC 5640 6100 6600 4AB8 6700 6100 6100 WROATA F08E FE06 0118 FF52 FF62 FF66 AOO.W BSR BNE TST.L BEQ BSR BSR #3,00 CHECKCO COWRITE $118 NOAPPL2 SENOCMO SENOHDR setup 10 command send 10 command and unit number send header and setup AO Page 040 28 Sap 02 19241 60** 19261 4A29 192AI 6AFA 192CI 4A29 19301 1358 1924* OE 19341 5342 19361 64EE 19381 6000 PAGE - 67 193CI 193CI 193CI 193CI 327C 19401 2251 19421 3FOO 19441 4840 19461 301F 19481 0240 194CI E148 194EI 0246 19521 OC46 19541 41FA 19581 4EFO 195CI 195CI 195CI 195CI 225F 195EI 3A1F 19601 67** 19621 300S 19641 0245 19681 OC45 196CI 62** 196EI C8FC 19721 41FA 19761 CC70 197AI 67** 197CI OC40 1980( 62** 19821 OC46 19861 66** 19881 19881 1820 198CI 67** 198EI 41FA 19921 60** 198C* 06 1986* OC 1980* 12 19941 2A30 19981 66** 199AI 41FA 1992* OA 199EI 4ED1 1998* 06 19AOI 204S 19A21 4ED1 197A* 28 19A41 7003 19A61 60** 196C * 3A 1960* 46 19A81 7002 19AAI 19A6* 0:2 PAGE - 68 19AAI 19AEI 19BOI 19B21 19B41 19B41 19B41 19B41 19B61 19B81 19BAI 19BCI 19BCI 19BCI 19BCI 19BEI 19CO, 19COI 19CO, 19COI 19BE* 19C21 19C41 19C61 19C81 TPR:MON11.TEXT 0006 (il 0002 0002 BRA.S TST. B BPL. S TST.B MOVE.B ti2 FF"3E MONITOR SUB.W BCC.S BRA FILE: MONIO.TEXT Page (il2 OUTCSR( A1 ) <11 woit till ready OUTDATA(A1) ; reset ready flag (AO)+,OUTDATA(A1) #1,02 @1 GETRSLT dec count get IORESULT and return DEFAULT DRIVER FOR ALL UNIT 10 ; DRVR 0118 001F OOOE FEE2 6000 , 0002 0001 # FCD6 5002 move machine/dev/unit number to upper word move unit number to upper byte map 1,2,4,8 to 0,4,8,16 goto to appropiate drvr save return address get unit number in 05 bad if zero save unit number for driver bad if greater than MAXU times UNITBL entry size test 10 direction unit 1 or 2 ? read ? test ebstop, if non zero then inexec @6 MOVE.L BNE.S LEA 2(AO,05),05 @1 ORVR,AO @7 JMP (A1 ) @1 MOVE.L JMP 05,AO (A1 ) @2 MOVE.L . #IBAOMOO, DO BRA.S @4 bad I/O direction @3 @4 MOVE.L #IBAOUNT,DO GETSYSC AO bad unit number get pOinter to syscom in AD FFAO 2060 FFFC 1080 4A59 4ED1 set up base register for PIA GET UNIT NUMBER AND VALIDATE (A7)+,A1 (A7)+,OS @3 OS, DO #$1F, 05 #MAXU,DS BHI. S @3 MULS #6,05 LEA UNITBL,AO ANO.W 0(AO,OS),06 BEQ.S @2 CMP.W #2,00 BHI. S @6 CMP.W #INBIT,06 BNE.S Cil6 GETE8ST 04 MOVE.B -121(A5),04 BEQ.S @6 LEA EXECORVR,AO BRA.S @7 0006 ED7C 5000 MONITOR #$118, A1 (A1 ), A1 DO, -(A7) DO (A7)+,00 #$lF,OO #8,00 #$E,06 06,06 DRVRTBL,AO O(AO, 06) GETUNIT MOVE.L MOVE.W BEQ.S .MOVE. W AND.W CMP.W 001F 0014 FF87 MOVE.W MOVE.L MOVE.W SWAP MOVE.W AND.W LSL.W AND.W ADD.W LEA JMP get address of driver move address of driver into AO and return FILE: MONIO.TEXT # MOVE.L MOVE.B TST.W JMP -4( AS ), AO IORSLT(AO) ~O, ~~i r skip JSR (AO) since iorslt is nonzero UNIT CLEAR ; 7C04 61A4 4E90 60** UCLR , MOVE.L BSR JSR BRA.S #CLRBIT,06 GETUNIT (AO) IOEXIT save UREQ in 06 get unit number and validate go to driver UNIT WRITE 7C02 60** UWRITE 7C01 02 361F 4843 361F 341F UREAO MOVE.L #INBIT,D6 save UREQ in 06 UIO MOVE.W SWAP MOVE.W MOVE.W (A7)+,03 03 ~ A7 )+,03 A7)+,02 get async param into the high word get blocknumber get length , .--- ....,...~- MOVE.L BRA.S #OUTBIT,06 UIO salle UREQ in 06 UNIT READ 041 28 Sep 02 TPR: MONU. TEXT 19CAI 221F 19CCI 618E 19CEI 4E90 19001 19BA* 14 19001 2060 FFFC 19041 10S0 19061 4E75 19081 19081 19081 19081 7C08 190AI 6180 19DCI 4E90 19DEI 241F 19EOI 0241 0001 19E41 3F01 19E61 2F02 19E5I 60E6 19EAI 19EAI 19EAI 19EAI 19EAI 19EAI 19EAI 19EAI 19EAI 19EAI PAGE - 69 MONITOR 19EAI 19EAI 19EEI 19F21 19F41 19F41 19F41 19F41 19F61 19F61 19FAI 19FCI 19FEI 1AOOI 1A021 1A021 1A021 1A021 1A041 1A041 1A081 lAOAI 1AOCI 1AOEI lAlOI 1AlOi 1Al41 lAl61 lA161 1A161 lA161 lAl81 lAl81 lAlCI lAlEI lA1EI lAlEI lA1EI lA201 lA201 lA241 lA261 lA261 1A261 1A261 lA2S1 1A2AI lA2AI lA2EI 1A301 1A321 1A3S1 lA3AI 1A3CI lA3EI PAGE lA3EI lA3EI lA3EI lA3EI lA3E, 1A3EI IOEXIT # , UBUSY MOVE.L BSR JSR GETSYSC (A7)+,Dl GETUNIT (AO) AO MOVE.L MOVE.B RTS -4(A5),AO DO, I ORSL T(AO ) get address get unit number and va 1 idate go to driver get pOinter to syscom in AO UNIT BUSY MOVE.L BSR JSR MOVE.L ANDI. W MOVE.W MOVE.L BRA.S #BSYBIT,06 GETUNIT ~~~~+,02 save UREQ in 06 get unit number and va 1 idate go to driver #1,01 01,-~A7~ 02,- A7 IOEXIT FUNCTION ADORORVR:PTR returns the address of the default driver stack: . 4 0 function result return address FILE: MONIO.TEXT AOORORVR LEA MOVE.L RTS 41FA FF50 2F48 0004 4E75 , 225F 2060 FFFC 1010 4880 3FOO 4ED1 # MNEW 321F 2060 FFF4 225F 2288 00C1 00C1 # 2848 FFF4 4E75 # IORESULT ZZIORES MOVE.L· GETSYSC MOVE.L MOVE.B EXT.W MOVE.W JMP , DRVR,AO AO, 4(A7 ) (A7)+,Al AO -4(A5),AO (AO ), DO DO 00,-(A7) (A1 ) get ioresult and return it ALLOCATE DYNAMIC MEMORY MOVE.W GETNP MOVE.L MOVE.L MOVE.L AOO.W AOO.W PUTNP MOVE.L RTS (A7 )+, 01 AO -12(A5),AO (A7 )+, A1 AO, (Al) 01,AO D1,AO AO AO,-12(A5) get number of words into 01 get current heap top in AO get address of ptr param in Al set pointer param to new mem space point AO above dyn mem area byte wise save new heap top MARK HEAP ; MMRK 225F 22AO FFF4 4E75 # MOVE.L GETNP MOVE.L RTS ~~~ t, Al -12(A5),(Al) get address of ptr param in A1 save top of heap in pointer param RELEASE HEAP ; MRLS 205F 2850 FFF4 4E75 # , MEMA 245F 204F 2260 FFF4 91C9 200S 0280 FFFF FFFE E298 2FOO 4E02 - 70 MONITOR # MOVE.L PUTNP MOVE.L RTS ~~~ t, AO (AD), -12(A5) get address of ptr param in AO cut back heap MEMAVAIL -- number of free words in data area MOVE.L MOVE.L GETNP MOVE.L SUB.L MOVE.L ANO.L ROR.L MOVE.L JMP (A7)+,A2 A7,AO Al -l2(A5),A1 A1,AO AO,OO #$FFFFFFFE,OO #1,00 ~O, -(A7) (A2 ) FILE: MONITOR. TEXT . INCLUDE PRTORVR.TEXT FILENAME: PRTORVR get number of bytes left make into number of words return number of words Page 042 28 Sep 82 TPR:MONll.TEXT Page 043 !AlEI lA3EI lA3EI 1A3EI 1A3EI lA3EI 1A3EI 1A3EI lA3EI 0246 lA421 4EFS 1A461 lA44* 02 lA461 1A461 60** lA4S1 60** lA4AI 60** 1A4CI 4E71 1A4EI 1A4EI 4241 1A46* 08 1ASOI 6000 1A4A* 08 1AS41 48E7 lASSI 61 *>Ie lA5AI 183C lA5EI 6100 1A621 4COF 1A661 6000 lA6AI 1A6AI lA6AI 1AS8* 10 1A6AI 1A6AI 1A6AI 2060 1A6EI 117C 1A741 117C 1A7AI 0890 1A7EI 0890 1A821 4E75 1A841 1A841 1AS41 1A48* 3A 1A841 48E7 lA881 4843 lA8AI 610E 1A8CI 2241 lABEl 5342 PAGE - 71 1A901 1A941 1A961 1A9S1 1A9CI 1A9EI. 1AA21 1AA41 1AA61 1AASI 1AAAI 1AAEI 1ABOI lAB41 lAB61 1ABAI 1AA2* lA9C* 1ABCI lABEl lAC21 lAC41 lAC81 1ACAI 1ACEI lAC8* lAC2* lABA* lAOOI lA041 lA94* lA061 lA081 lAOAI lA04* lAOEI lA68* lA52* 1AE21 lAE41 lAE61 lAE61 lAE61 lAOS* oe03 67** lS19 0803 66** Oe04 66** 5342 4.244 1819 0404 3A04 lS3C 61** 51CO 60** 18 IE 61** 0803 66** Oe04 66** 183C 61** 016 OC 14 51CA 60** 40 1819 61** 5lCA 08 4COF 007A 0090 4240 4E75 DC DO 01 02 03 AD unit number buFfer address number bytes async parm,block# address of base word long word long long ; OOOE 60** PRTORVR ANOI JMP #$E,06 ACTNTBL(06 ) Force entry type For indexed jump and do it ACTNTBL BRA.S BRA.S BRA.S NOP , BRA.S PRTBUSY CLR PRTREAO PRTWRT PRTCLR **** PRTREAO BRA PRTEXIT FCOO PRTCLR MOVEM.L BSR.S MOVE.B BSR MOVEM.L BRA DO-OS, -(A7) PRTSETUP #$11,04 PRTSENO (A7)+,OO-OS PRTEXIT GETPRBA MOVE.L MOVE.B MOVE.B BCLR BCLR RTS AD -172( AS ),-AO #$OE, PCR( AD) #$FF, DORA lAO) #3,ORB(AO #2,ORB(AO set ctrl CA2 high port A bits to output bidir drvr to output enable the driver DO-OS, - (A7 ) 03 PRTSETUP Ol,Al #$1,02 adjust For the OBF 0011 **** 003F **** PRTBUSY 01 no entry here assume unitbusy is False PRTSETUP FF54 OOOE 0060 OOFF 0018 0003 0002 FCOO MONITOR # PRTWRT MOVEM.L SWAP BSR.S MOVE.L SUB.W FILE: PRTORVR.TEXT OOOC CMP.S BEQ.S MOVE.S BTST BNE.S CMP.B BNE.S SUB.W CLR.W MOVE.B SUB.B MOVE.W MOVE.S SSR.S OBF BRA.S #$OC,03 cUD (A1)+,04 #2,03 ®3 #$10,04 ®3 #1,02 04 (A1)+,04 #$20,04 04,05 #$20,04 PRTSENO 05,®2 ®4 BSR.S BTST BNE.S CMP.B SNE.S MOVE.S BSR.S PRTSENO #3,03 @4 #$00,04 ®4 #$OA,04 PRTSENO was last character a CR ®4 OBF BRA.S 02,@1 ®11 are we done yet? @10 MOVE.S SSR.S OSF (A1)+,04 PRTSENO 02,@lO @1 0002 0010 0020 0020 ®2 FFFC ®3 0003 0000 OOOA FFC4 FFFA 003F get base of pia @11 get character into 04 dIe? is it a dIe character adjust character count , get # of spaces to send set character to space send the suckers send LF set character to LF no interpretation to do more to do? MOVEM.L (A7)+,00-05 PRTEXIT CLR RTS DO set IORSLT value 28 Sep 8,2 lACE* 16 lA8C* 28 lA84* 30 lA60* 0086 lAE61 0810 lAEAI 66FA lAECI 117C lAF21 1144 lAF61 117C lAFCI 117C 18021 0828 PAGE - 72 18081 S7F8 180AI 4E75 l80CI 180CI 180CI 180CI l80CI l80CI 180CI 180CI l80CI 180CI 180CI l80CI 205F 180EI 301F 18101 22SF 18121 245F 18141 426A 18181 4,22A 181CI lS7C 18221 lS7C 18281 2489 182AI 4A40 182CI S7u 182EI OC40 18321 SS** 182C* 06 18341 4229 18381 3S7C 183EI 4A40 18401 S6** 18421 3S7C 18481 SO** 1832* 16 184AI 4A40 184CI SA** 184EI 4292 18501 426A 18541 60u 184C* 08 18561 0040 18581 3540 1854>1< 06 1848* 12 1840* lA 185CI 4EOO 185EI 185EI 18SEI 18SEI 18SEI 18SEI 18SEI 18SEI 18SEI PAGE - 73 18SEI 18SEI 18SEI 18SEI 18SEI 18SEI 18SEI 18SEI 18SEI 18SEI 18621 18S61 18SAI l8SCI 18701 18721 18761 18781 187CI 18801 18841 18881 l88CI l88EI TPR: MONll. TEXT 0000 007F 00S8 0008 OOOC OOSO OOOE OOSO 0001 00S8 MONITOR PRTSENO 8TST 8NE.S MOVE. 8 MOVE. 8 MOVE. 8 MOVE. 8 (ill 8TST FILE: PRTORVR.TEXT 8EQ.S RTS #0, IR8( AD) PRTSENO #$7F, I FR ( AO ) 04, ORA( AD} #$OC, PCR( AD) #$OE, PCR( AD) #1, IFR(AO) Page 044 wait for PE/ clear CAl flag output the data set ctrl CA2 low set ctrl CA2 high CAl set yet IJI . INCLUDE FILPRC1.TEXT FILENAME FILPRCl FINIT(F:FI8; W:WP; RECWOROS:INTEGER); , FINIT OOOS OOOA 0001 0005 0001 0004 FFFE 0001 0001 0008 0001 0006 0008 0008 FINITX (TAO MOVE.L MOVE.W MOVE.L MOVE.L MOVE.W MOVE. 8 MOVE. 8 -MOVE. 8 MOVE.L TST.W 8EQ.S CMP.W 8NE.S A7 +,00 A7 +,Al A7 +,A2 #0, FSTATE( A2 ) #0, FI SOPEN\ A2 } #1,FEOF(A2 #1; FEOLN( A2 ) Al, FWINOOW(A2} DO fill #-2,00 IJ2 MOVE. 8 MOVE.W TST.W 8NE.S MOVE.W 8RA.S #0, 1 (Al ) #1, FRECSZ( A2 } DO FINITX #1, FSTATE(A2) FINITX TST.W 8PL. S MOVE.L MOVE.W 8RA.S DO (j3 #NIL,FWINOOW\A2) #0,FRECSZ(A2 FINITX AOO.W MOVE.W 00,00 DO, FRECSZ( A2 } JMP (AD) SCANTITLE(VAR VAR VAR VAR VAR return address recwords ptr to Window file ptr fstate:=fjandw .f isopen: =fa Ise feof:=true feoln:=true fwindow:=ptr to Window if recwords = 0 or -2 then fWindowt[l]:=null frecsize:=l if recwords = 0 then Fstate:=Fneedchar iF recwords < o then FWindow:=nil Frecsize:=O frecsize:=2*recwords FTITLE:STRING; FVIO:VIOj FTIO: TIOj F8LOCKS:INTEGER; FKINO:FILEKINO):800LEAN stack MONITOR FILE: ILPRCl.TEXT 2B 24 20 lS 12 B 4 o FUNC RESULT ®FTITLE ®FVIO ®FTIO @F8LOCKS @FKINO RETURN ADDRESS Old AS ; 4E56 6100 206E 4210 206E 4210 206E 4250 206E 4228 42AE 206E 43EE 1018 S700 FFOO EOlE 0014 0010 OOOC 0008 0001 ODIC 0018 FFOO ***>1< SCANTTL LINK 8SR MOVE.L MOVE. 8 MOVE.L MOVE. 8 MOVE.L MOVE.W MOVE.L MOVE. 8 MOVE.L MOVE.L LEA MOVE. 8 BEQ AS,#-2SS OVFCHK 20(A6),AO #0, (AD) 16(A6),AO #0, (AO) 12( AS ), AD #0, (AD) 8(AS), AD #UNTYPFL. 1 ( AD ) #0, 2B( AS) 24(AS),AO -256( A6 ), Al (AD )+, DO SCANTTLX allocate space for string[2S5] f'v id: =' . f'tid:=" fblocks:=O fkind:=untypedf'ile scantitle:=f'alse get address of string get address of string copy get string length elCit if zero 28 Sap 82 TPR: MON1l. TEXT IB921 2049 1B961 12CO 1B981 1208 189AI 5300 1B9CI 66FA 1B9EI 266E 1BA21 206E 1BA61 7201 1BA81 B210 1BAAI 61E*'" 1BACI 1030 1BBOI OCOO 1B841 6E*'" 1BB61 6100 1BBAI 60EC IBB4'" 06 1BBCI 6100 1BCOI 1180 IBC41 5241 1BC61 60EO 1BAA'" 1e 18C81 4A10 1BCAI 6700 18CEt 0(28 IB041 66** 18061 IB061 2260 IBOAI 244B 1BOCI 2409 1BOEI 2409 1BEOI 2·409 PAGE - 74 IBE21 2409 1BE41 2409 1BE61 2409 1BE81 7201 1BEAI 6100 IB04* 18 IBEEI 4281 1BFOt 60** 1BF21 5201 IBF41 0(30 1BFAI 67** 1BFO* OA IBFCI B210 1BFEI 66F2 1COOI 4281 lC021 60*'" 1BFA* 08 1C041 OC01 1C081 66*'" 1C02'" 06 lCOAI 244B 1COCI 4A12 1COEI 66*'" 1C101 1C101 22S0 1C141 2409 1C161 2409 1C181 2·409 1C1AI 2409 1C1CI 2409 1C1EI 2409 1COE'" 10 1C201 OC01 1C241 66*'" 1C261 6100 1C24* 04 1C2AI 60*'" 1C08'" 22 1C2CI 5301 1C2EI Oe01 1C321 6E** 1C341 3F01 1C361 2F08 1C381 3F3C 1C3CI 3F01 1C3EI 2FOB 1C401 6100 1C441 361F 1C461 5243 1C481 7201 1C4AI 6100 1C4EI 5303 1C501 66F6 1C32'" 1E 1C2A'" 26 PAGE - 75 1C521 1C541 1C581 1C5AI -"....... ~- AI, 24( AS) A1 00,\ (AO+,.Al)+ #1,00 SCNSTRC 20~AS~,A3 24 AS ,AD #1,01 (AO),Ol FAIRTTL O(AO, 01. W), DO #$20,00 III 3 OELlCH Illl Cilf'vid Illf'title i: =1 wh i Ie i<= len( f't it Ie) do "'''''''''' MOVE.L MOVE.B SCNSTRC MOVE.B SUB.B BNE.S MOVE.L MOVE.L MOVE.L III 1 CMP.B BGT.S MOVE.B CMP.B BGT.S BSR BRA.S "'''''''''' @3 UPSHFT DO, O( AO, 01. W) #1,01 @1 upsh ift( ch) f't it le[ i]: =ch i: = i+1 (AO) SCANTTLX #42,1(AO) NOTSTAR A1 -44( AS ), A1 A3,A2 if' len(ftitle)=O then exit if' ftitle[l] = ' *' then 0018 0014 0018 1000 0020 1000 "'''''''''' 002A 0001 FF04 MONITOR .. MOVE.L MOVE.L MOVE.L MOVE.L BSR 003A 1000 0001 FFCC 0001 de lete( f't it Ie, 1, i) f'vid:=syvid A1 +, A2 + !A1r'(2r A1 +, A2 + Al +, A2 + !A1r'!A2r A1 +, A2 + #1,01 OELlCH de lete( ft it Ie, 1, 1) CMP.B BNE.S MOVE.L BRA.S (AO),Ol 1110 #0,01 1112 @1 CMP.B BNE.S #1,01 @5 @2 MOVE.L TST.B BNE.S GETOKV MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L A3,A2 (A2 ) @3 A1 -52(A5),A1 A2 ~+ A1 r' A1 +, A2 + A1 +, A2r A2 + A1 r' A1 +, A2 + A1 +, A2 )+ if' CMP.B BNE.S BSR #1,01 ®4 OELlCH if' i=l then III 4 BRA.S TSTFVIO illS SUB.B CMP.B BGT.S MOVE.W MOVE.L MOVE.W MOVE.W MOVE.L BSR MOVE.W AOO.W MOVE.L BSR SUB.B BNE.S #1,01 #23,01 TSTFVIO 01,- A7 ) AO,#1,- A7 01,- A7 A3,- A7 TTLCOPY (A7)+,03 #1,03 #1,01 OEL1CH #1,03 1116 # @3 **"'''' 1116 cop~ ch:=ftitle[i] if ch<=' , then 1117 0001 --,,~ ..-,...""~-- save pOinter to the the length the string cop~ cop~ #0,01 1i17 #1,01 #58, O(AO, 01. W) @1 0017 MONITOR t NOTSTAR MOVE.L BRA.S 1110 AOO.B CMP.B BEQ.S ***'" "'''''''''' BSR MOVE.B AOO.W BRA.S FAIRTTL TST.B BEQ CMP.B BNE.S GETSYV # MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L FILE~ FILPRC1. TEXT **"'* 4A13 6700 ***'" 4281 60** .. Pege 045 i:=pos(': ',ftitle) if' i<=l then len( f'v id )=0 then f'vid:=dkvid de lete( f't it Ie, 1, 1 ) if' 1-1 <= vidleng then Al! f'v id: =cop~( f't it Ie, 1, i-1 ) de lete( ft it Ie, 1, i) FILE: FILPRC1.TEXT TSTFYIO TST.B BEQ MOVE.L 8RA.S (A3 ) SCANTTLX #0,01 11114 if' len(fv id )=0 then e)( It 28 Sap 82 lC5CI 5241 lC5EI oe30 1C641 67"'* lCSA'" OA lC661 B210 lC681 66F"2 lC6AI 4281 lC6CI 60** lC64'" 08 lC6EI 5301 1C70( 60*'" lC6C* 04 lC721 1210 lC741 4282 1C70'" 04 lC761 oe01 lC7AI 6EOO lC7EI 4AOl lC801 67"'* lC821 2448 lC841 226E lC881 4A1A lC8AI 1001 1C8CI 12CO 1C8EI 120A lC901 5300 lC921 66F"A lC941 1410 lC961 9401 lC981 OOCl lC9AI 1082 lC80'" 1A 1C9CI 4Al0 1C9EI 66** 1CAOI 7401 lCA21 6000 1C9E'" 06 lCA61 4282 1CA81 4283 lCAAI 60** lCACI 5203 lCAEI oe30 1CB41 67"'* lCAA* OA lCB61 B610 lCB81 66F"2 lCBAI 4283 lCB4'" 06 lCBCI OC03 lCCOI 66*'" lCC21 7401 PAGE - 76 lCC41 lCCO'" 1CC61 1CC81 lCCAI 1CCCI 1CCEI 1C02( 1C061 1C081 1COCI lCOEI lCE21 lCE41 1CE8, 1CEAI lCEEI 1CF"01 lCOC'" 1COS* 1CF"21 lCF"O* 1CF"41 lCF"61 lCF"81 1CF"AI lCF"CI lCF"8* lCF"EI 10021 10041 10081 100AI 100CI 10121 10141 10181 101CI 1012'" 1008* 1002* lce6* 60"'''' 04 SF"'''' 7401 7202 4240 1030 oeoo 60*'" DC 00 6E"'''' 226E 3811 C9F"C 0840 0444 3284 60*'" 14 lA 4282 02 5201 B601 67"'''' 4M2 66CE 04 oe01 66"'* oe03 66** 5301 OC30 6!5"'* 226E 32BC 7401 OA 14 lA 56 TPR:MONll.TEXT @O AOO.W CMP.B BEQ.S ill @14 CMP.B BNE.S MOVE.L BRA.S (AO),Ol @o #0,01 ®2 if 1>0 then ~1 SUB. B BRA.S #1,01 @3 else 005B 1000 OOOF' "'''''''''' ~2 MOVE. B (AO),Ol MOVE.L #0,02 @3 CMP.B BGT TST.B BEQ.S MOVE.L MOVE.L TST.B MOVE.B MOVE.B MOVE.B SUB.B BNE.S MOVE.B SUB.B AOO.W MOVE.B 0010 @4 (1)5 *"'*'" (i13 (i6 0050 3000 (i1S 0002 MONITOR OOOC 000 A 0030 @10 0003 002A 1000 OOOC F"F"F"F" ®12 i: =i-l i:=length(ftitle) ok:=false if i <= t1dleng then if 1>0 then get address of sre get address of dst skip sre string length get string length eop~ string length ft id: =eopy( ft it Ie, 1, i) (i)4 de lete( ft it Ie, 1, 1) TST.B BNE.S MOVE.L BRA (AO) (1)13 #1,02 OOSUFIX if len(ftitle)=O then MOVE.L MOVE.L BRA.S AOO.B CMP.B BEQ.S #0,02 #0,03 CMP.B BNE.S MOVE.L (AO),03 (i6 #0,03 CMP.B BNE.S MOVE.L FILE: F"ILPRC1.TEXT 0039 #15,01 OOSUF'IX 01 (is AO,A2 16(A6),Al (A2 )+ 01,00 ~O, (Al)+ (A2 )+, (Al)+ #1,00 i:=pos('[',ftitle) (AO),02 01,02 01,AO 02, (AO) (i7 1000 0030 0003 #1,01 #91, O( AO, 01. W) Page 046 'ok: =true else ok:=false ~15 #1,03 #93, O( AO, 03. W) (i7 rbraek: =pos(' ]' , ft it Ie) #2,03 (i8 #1,02 if rbraek=2 then BRA.S OOSUF"IX else BLE.S MOVE.L MOVE.L CLR.W MOVE.B CMP.B BLT.S CMP.B BGT.S MOVE.L MOVE.W MULS AOO.W SUB.W MOVE.W BRA.S OOSUF"lX #1,02 #2,01 DO O( AD, 01. W), DO #'0',00 (il0 #'9' ,DO (il0 12(A6),Al (Al ),04 #10,04 00,04 #'0' ,04 04, (Al) ®11 MOVE.L #0,02 AOO.B CMP.B BEQ.S TST.W BNE.S #1,01 01,03 @12 02 ®9 CMP.B BNE.S CMP.B BNE.S SUB.B CMP.B BNE.S MOVE.L MOVE.W MOVE.L #3,01 OOSUF"IX #3,03 OOSUF" I X #1,01 #42, O( AD, 01. W) OOSUF" I X 12(A6),Al #-1, (A1) #1,02 ok:=true if rbraek>2 then ok:=true i: =2 repeat eh: =ft it leE i] if eh in DIGITS then fbloeks:=fbloeks*10 fbloeks:=fbloeks+ord(eh) fb locks: =fb loeks-ord(' 0' ) else ok:=false i: = i+l until i=rbraek or not ok if 1=3 then if rbraek=3 then if fti,tle[i-l]=''''' then fblocks:=-l ok:=true 28 Sep 1~2 lCC4* !is lCA4* 007A 1C7C'" 00A2 101EI 2042 10221 6700 10261 206E 102AI 1010 102CI OCOO 10301 6000 10341 2F08 10361 5940 10381 3FOO 103AI 3F3C PAGE - 77 103EI 10421 10461 104AI 104EI 1052, 10561 10581 105EI 1056* 10601 10641 10681 106CI 106EI 10741 106C* 10761 107AI 107EI 10821 10841 108AI 1082* 108CI 10901 10941 10S81 10SAI 10AOI 10S8* 10A21 lOA61 10AAI 10AEI 10BOI 10B61 10AE* 10B81 lOBCI lOCOI 10C41 10C61 10C4* 10B6* 10AO'" 108A* 1074* 105E* 1032* 1024* 2F2E 6100 246E 206E 43FA 6100 67"'* 157C 60*'" 08 206E 43FA 6100 67*'" 157C 60** 08 206E 43FA 6100 67"'''' 157C 60"'* 08 206E 43FA 6100 67*'" 157C 60** 08 206E 43FA 6100 67** 157C 60** 08 206E 43FA 6100 67** 157C 06 14 2A 40 56 6e 009A 00A8 TPR: MON11. TEXT 001C **** 0010 0005 **** 0005 MONITOR OOSUFIX MOVE.L BEQ MOVE.L MOVE.B CMP.B BLT OOSFX MOVE.L SUB.W MOVE.W MOVE.W FILE: FILPRCl. TEXT 001S *"'*'" 0008 0018 **** "'''''''''' MOVE.L BSR MOVE.L MOVE.L LEA BSR BEQ.S MOVE.B BRA.S 24(A6), -(A7) TTLCOPY 8(A6),A2 24(A6),AO SF"XTEXT,Al CMPSFX ®1 #TEXTFILE, 1(A2) SCANTTLX ®1 MOVE.L LEA BSR BEQ.S MOVE.B BRA.S 24(A6),AO SFXCOOE,A1 CMPSFX ®2 #COOEF"I LE, 1 (A2 ) SCANTTLX ®2 MOVE.L 24( AS ), AO "SF"XBACK, Al LEA BSR CMP!?FX BEQ.S 113 MOVE.B #TEXTFILE, 1(A2) BRA.S SCANTTLX il3 MOVE.L LEA BSR BEQ.S MOVE.B BRA.S 24(A6),AO SFXINF"O,Al CMPSFX il4 #INFOFILE, 1(A2) SCANTTLX il4 MOVE.L LEA BSR BEQ.S MOVE.B BRA.S 24(A6),AO SF"XGRAF,Al CMPSFX ®5 #GRAFFILE, 1(A2) SCANTTLX il5 MOVE.L LEA BSR BEQ.S MOVE.B 24(A6),AO SFXFOTO,A1 CMPSFX SCANTTLX #FOTOF"I LE, 1 ( A2 ) 0003 0001 0018 "'''''''''' "'''''''''' 0002 0001 0018 **"'* **** 0003 0001 0018 *"'*'" "'''''''* 0004 0001 0018 "'''''''''' "'''''''''' 0006 0001 0018 "'''''''* **** 0007 0001 02, 28(A6) SCANTTLX 16(A6),AO (AO ),00 #5,00 SCANTTLX AO, -(A7) #4,00 00,-~A7~ #5,- A7 Page scantitle:=ok if not ok then exit if len(ftid) > 5 then push source string address compute length-4 push starting index push size to copy push address of result lC56* 0176 IBCC* 0200 IB90* 023C 10CCI PAGE - 78 10CCI 10CEI 10001 10041 10061 1050* 10061 10071 100CI 1066* 100CI 10001 10E21 107C* 10E2, 10E31 10E81 10S2* 10E8, 10E91 lOEEI 10A8* MONITOR 4E5E 205F OEFC 0016 4EOO SCANTTLX F"ILE: FILPRC1.TEXT UNLK MOVE.L AOO.W JMP A6 (A7)+,AO #22,A7 (AO) 0086 05 21:: 54 45 58 54 SFXTEXT . BYTE · ASCII 5 '. TEXT' 0076 05 21-: 43 4F 44 45 SFXCOOE · BYTE · ASCI I 5 '. CODE' 0066 05 21-: 42 41 43 4B SFXBACK .BYTE · ASCI I 5 0056 05 21:: 49 4E 46 4F SFXINFO · BYTE · ASCI I 5 '.INFO' --__ 0046 """."'......... .BACK' pop return address delete parameters 047 28 Sap 82 TPR:MONll.TEXT lOEE! 05 1DE~ 2E 47 52 41 46 1OF41 IDBE* 0036 IDF41 05 IDF5t 2E 46 4F 54 4F 10FAI IDFAt IDFAI IDFAI 10FAI IDFAI 10FAI 10FAI 10FAI lC4C* 01AE lC28* 0102 IBEC* 020E IBB8* 0242 10FAI 5310 10FCI 3401 10FEI 9410 lEOOI 6E** 1E02! 4402 1E041 45FO 1000 1E081 43FO 1001 lEOCI 1409 1EOEI 5342 1EI01 64FA lEOO* 10 1E121 4E75 1E141 lE141 PAGE - 79 MONITOR lE141 1E141 10C2* 0052 10AC* 00G8 109G* 007E 1080* 0094 lOGA* OOAA 1054* OOCO 1E141 4240 lE16! 8'388 lE181 66** 1ElAI 8348 lE1CI 66** lElE! 7001 lEIC* 02 lE18* 06 lE201 4A40 1E221 4E75 lE241 lE241 lE241 1E241 lE241 lE241 1E241 lE241 1044* OOEO lC42* 01E2 1E241 48E7 lE281 20GF 1E2CI 302F 1E301 322F 1E341 5341 lE3GI 226F lE3AI 4242 1E3CI 1419 1E3EI 9441 1E401 9440 1E421 60** 1E441 02C1 lE461 lOCO 1E481 GO*'" lE4AI 1009 1E48* 02 1E4CI 5340 1E4EI 6AFA 1E501 2F6F 1E561 4COF 1E5AI OEFC 1E5EI 4E75 lE42* 1C lEGOI 4210 1E621 60EC 1EG41 1E641 PAGE - 80 1E641 4E4F 1E661 SFXGRAF . BYTE .ASCII 5 '. GRAF' SFXFOTO .8YTE . ASCII 5 '. FOTO' OELlCH DELlCH @2 -- Page deletes one character from FTITLE 01 AO is the character position to delete from is a ptr to FTITLE A1-A2 02 used as scratch used as scratch SUB.B MOVE.W SUB.B BGT.S NEG.B LEA LEA MOVE.B SUB.W BCe. S #l,(AO) 01,02 (AO ), D2 @4 02 o(AD , 01. W), A2 l(AO, D1. W), Al (AI )+, (A2)+ #1,D2 @2 decrement length IF I<=LEN(FTITLE) THEN dst ptr src ptr copy each byte RTS Ci4 ; CMPSFX -- compares FILE: FILPRC1.TEXT ~ chars at AO to S chars at Al equal or not equal is set into 00 CMPSFX MOVE.W CMPM.L 8NE.S CMPM.W BNE.S MOVE.L CMPSFXX TST.W RTS #0,00 (AO)+,(A1)+ CMPSFXX (AO )+, (AI )+ CMPSFXX #l,DO 0014 0020 0307 00 DC result is true DST:=COPY(SRC,I,J) Parameters: ST.L ST.W ST.W ST.L 0020 next 2 equal? DO TTLCOPY EOCO 0018 ODIC ODIE assume false first 4 equal? - Source string address Starting index Size to copy Address of result TTLCOPY MOVEM.L MOVE.L MOVE.W MOVE.W SUBQ.W MOVE.L CLR.W MOVE.B SUB.W SUB.W BLT.S AODA.W MOVE.B BRA.S Y.LOOP: MOVE.B 00-D2/AO-Al,-(SP) 24!SP),AO 28 SP),DO 30 SP),Dl #l,Dl 32( SP), Al D2 (A1 )+, D2 D1, D2 DO,D2 Y.ERROR Dl,A1 DO, (AO)+ Y.TEST (A1 )+, (AO)+ Y.TEST: SUBQ.W BPL.S Y.LEAVE:MOVE.L MOVEM.L ADD.W RTS #l,DO Y.LOOP 20(SP), 32(SP) ; Set up return address (SP)+,DO-D2/AO-Al #12,SP Delete parameters Y.ERROR:CLR.B BRA.S (AO) Y.LEAVE Set result to null for now And return #SF Not to be used (was FETCHDR Address for result Size to copy Index Address of source string to get length of source Error if too little source Point to first byte to copy Store result length ; MONITOR FREEPROC FILE: FILPRC1. TEXT TRAP $120 ) 048 28 Sap 82 lE661 lE661 lE661 lE661 lE661 lE661 lE661 3F'02 lEG81 0257 lE6el OC57 lE701 G7** lE721 DC 57 lE761 67*", lE78! OC57 lE7CI 62** lE7EI 44F"C lE821 60** lE7C'" 06 lE76'" OC lE70* 12 lE841 44F"C lE82* 04 lE88! 544F" lE8A! 4E75 lE8CI lE8CI lE8CI lE8C! lE8CI lE8CI lE8C! lE8CI 0442 lE90! 3F"02 lE92! 0257 lE961 EA4A lE981 C5F"C lE9C! D45F" lE9EI E:r4A lEAO! 41t:75 lEA2! lEA2! lEA21 lEA2! lEA21 lEA2! lEA2! lEA2! lEA2! lEA2! lEA2! lEA21 lEA2! lEA2! lEA2! PAGE - 81 lEA21 lEA61 lEAAI lEACI lEAEI lEB21 lEB41 lEAC* lEB41 lEB81 lEBAI lECOI lECOI lEC41 lECAI lE021 lE081 lEOCI lEEO! lEE21 lEE41 lEE41 lEE4! lEE41 lEE81 lEEAI lEEEI lEF"21 lEF"4! lEF'81 lEF'AI lEF"AI lEF'AI lEF"AI lEF'EI IF"OOI lEB2* IF'02! IF"041 IF'08! TPR:MONll.TEXT Page 049 UNITISBLKD(LUNIT:INTEGER) parameters 02 , 001F" 0004 0005 0008 0004 0000 lunit UNITISB MOVE.W ANO.W CMP.W BEQ.S CMP.W BEQ.S CMP.W BHI. S MOVE BRA.S #4,CCR @2 cc=Z @l MOVE #O,CCR cc=NZ (il2 AOO.W RTS #2,A7 02, -(A7) #$1F", (A7) #4,(A7) (ill #5, (A7) @I #8, (A7) get just unit# til UT17IOX Input: , 0020 _ OOlF" 02 Output: 02 UT17IOX SUB.W MOVE.W ANO.W LSR.W MULS AOO.W LSL.W RTS 0015 dev#*32+unit# (dev#-1)*21*8+unit#*8 #$20,02 D2,-(A7) #$lF", (A7) #OEVNSHF",02 #MAXU+l,D2 (A7)+,02 #3,02 subtract 1 from dev# farm unit# farm dev#*21 multiply by size of UT17vid F"TCHOIR(LUNIT:INTEGER; VAR OIRBUF":DIRECTORY) parameters 02 A2 -2 -6 -8 -12 , MONITOR Note: lunit address of directory length black first:boolean nextaddr iors I t for the 110 is returned in OG F"ILE: F"ILPRC1.TEXT 4E56 F"F"F"4 48E7 F"C08 GIBA 66** 303C 0002 60** 06 2660 F"F"F"4 244B 07F"C 0000 0800 284B 307C 207C 307C 204A 6100 3F"02 2FOA F"F"F"4 0800 F"F"F"E 0000 0002 F"F"F"A 0001 F"F"F"8 F"F"F"4 E9A4 222E 3F02 342E 262E 7COl 6100 4E90 F"F"F"4 F"TCHOIR LINK MOVEM.L BSR BNE.S MOVE.W BRA.S @O GETNP # # @17 MOVE.L MOVE.L AOO.L PUTNP MOVE.L MOVE.W MOVE.L MOVE.W MOVE.L BSR MOVE.W MOVE.L A6,#-12 00-05/AO/AI/A3/A4, - (A7) save registers UNITISB @O #IBADUNT,OO @3 A3 -12(A5), A3 A3,A2 #OIRSZ,A3 A3 A3, -12( AS) #OIRSZ, -2(A6) #OIROISK, -6(AG) #1, -8( A6 ) A2, -12(A6) OVF"CHK 02, -~A7 ~ A2,- A7 allocate foul'" blocks for the directory length block first:=true nextaddr:=address of directory buffer save dev#/un it# save address of directory buffer read the directory MOVE.L MOVE.W MOVE.W MOVE.L MOVE.L BSR JSR F"F"F"E F"F"F"A F'A66 -12(A6),01 02, -(A7) -2~A6~,02 -6 A6 ,03 #INBIT,06 GETUNIT (AO) address of directory buffer dev#/un it# length block save UREQ in OG get unit number and va 1 idate go to driver test iorslt 6100 F'A04 245F" 341F" 4E 3eOO 6700 **** @3 BSR MOVE.L MOVE.W IOEXIT ~A7 ~+, A2 A7 +,02 record iarslt restore address of directory buffer restore dev#/unit# MOVE.W BEQ 00,06 @l save iosrlst in temp 28 Sep 82 1F081 lF081 lF081 3802 lFOAI E64C lFOCI 0244 lF101 lF101 2260 lF141 2A31 lF181 0585 lF1AI 2385 lF1EI OC42 IF221 62** lF241 lF241 2060 lF281 CSFC PAGE - 82 lF2CI 41FO IF301 4298 lF321 4298 IF341 6000 IF381 IF22* 14 lF381 2060 IF3CI 6100 IF401 41FO IF441 60EA IF461 IF461 4A6E IF4AI 67** lF4CI 302A IFSOI S440 IFS21 C1FC lFS61 0440 IF5AI 6BOO IFSEI 0640 lF621 E048 lF641 E248 IF661 OC40 IF6AI 60** IF6CI 303C IF6A* 04 1F701 CIFC IF741 3040 IF781 1F781 2660 1F7CI 07CO 1F7EI 1F7EI 2848 1F821 207C 1F8AI 426E lF8EI 06AE 1F961 6000 1F9AI 1F9AI 1F9AI 1F06* 0094 lF9AI OC6A 1FAOI 67** 1FA21 OC6A lFA81 679C 1FAAI 103C lFAEI 6100 1FB21 6000 lFB61 lFB61 1FB61 1FAO* 14 1FSC* 005A 1F4A* 6A 1FB61 7201 1FB81 OC42 PAGE - 83 IFBCI IFBEI IFBEI IFC21 1FC41 IFC81 lFCCI lFBC'" lFCE, lFOOI IFOO, IF041 lF08, IFOC, IFCC* IFOE, IFEO, IFE21 IFE6, IFE8, TPR:MONll.TEXT Page 050 if error then log out this unit & clear uvid (in utbl or UT17) 003C FF60 4000 4000 001F FFBA OOOC MONITOR MOVE.W LSR.W ANO.W GETLOGN # MOVE.L MOVE.L BCLR MOVE.L CMP.W BHZ.S GETUTBL # MOVE.L MULS FILE: FILPRCI. TEXT 2000 LEA MOVE.L MOVE.L BRA GETUT17 UVIO(AO,02),AO #O,(AO)+ #O,(AO)+ FTCHORX AO MOVE.L BSR LEA BRA.S -l64(A5),AO UT17IOX UT17VIO(AO,02),AO (illl tI16 1ST.W BEQ.S MOVE.W AOO.W MULS SUB.W BMI AOO.W LSR.W LSR.W CMP.W BLT.S MOVE.W -8( A6 ) tI2 ONUMFLS(A2),00 #2,00 #OELENG,OO #OIRSZ,OO @2 #511, DO #8,00 #1, DO #36,00 (il18 #36,00 1118 MULS MOVE.W GE1NP MOVE.L AOO.L PU1NP MOVE.L MOVE.L MOVE.W AOO.L BRA #512,00 DO, -2( A6 ) A3 -l2(AS),A3 00,A3 A3 A3, -l2(AS) #OIROISK+4,-6(A6) #0, -8(A6) #oIRSZ, -12(A6) @17 (111 **** @l2 FFSC FF4E 2000 # , FFF8 0010 001A 0800 **** 01FF 0024 0024 0200 FFFE FFF4 # FFF4 0000 0006 FFFA FFF8 0000 0800 FFF4 FF44 02,04 #3,04 #$3C,04 Al -160(A5), A1 0(Al,04.W),05 02,05 05, O( Al, 04. W) #$1F,02 (il12 AO -70(A5),AO #UTBLSIZ,02 # log it out if dev# < 1 then begin uVid(unit#):=" and exit end else begin uv ide dev#, un it#): =' . and exit end length grow directory on the heap block first:=f.lse nextaddr:=nextaddr+2048 test for male/female directory @1 0006 0002 002A 0002 0009 FA20 FF4E CMP.W BEQ.S CMP.W BEQ.S MOVE.B BSR BRA.S #6, 2(A2) @2 #42,2(A2) @16 #INOUNIT,OO IOEXIT @3 female directory? no compare the uvid (in utbl or UT17) with dvid (in the directory) @2 OOlF MONITOR MOVE.L CMP.W FILE: FILPRC1.TEXT 62** 2060 FFBA 3602 C7FC OOOC 4lFO 3000 60** 10 3F02 # 2060 6100 41FO 34lF 10 2648 261B 43EA B691 66** # FF5C FEB6 2000 @14 @lS 0006 #1,01 #$1F,02 BHI. S GE1UTBL MOVE.L MOVE.W MULS LEA BRA.S @14 AO -70(A5),AO 02,03 #UTBLSIZ,03 UVIO(AO,03),AO @l5 MOVE.W GETUT17 MOVE.L BSR LEA MOVE.W 02, -( A7) AO -164(A5), AO UTl7IOX UT17VIO(AO,02),AO (A7 )+, 02 MOVE.L MOVE.L LEA CMP.L BNE.S AO,A3 (A3)+,03 OVID(A2),Al (Al),03 ®S yes, ok:=true if dev# < 1 then copy lunit to compute get ®uvid(unit#) else get (ilUVid(dev#,unit#) if uvid<>dvid then go validate directory ~uvid 28 Sap 92 TPR:MONll.TEXT IF'EAI 2618 1F'ECI 86A9 IF'F'OI 66"'* IF'F'21 1F'F'21 IF"F"21 IF"F"21 3802 IF"F"41 E64C IF"F"61 0:244 IF"F"AI IF"F"AI 2260 IF"F"EI 2A31 20021 0505 2004, 6600 200S1 200BI 200S1 IF"F"O* 16 IF"ES* IE 200S1 7001 200AI 47EA 200EI 806A 2012, 6E** 20141 1628 201S1 68** 201AI OC03 201E, 6E** 2020, 3613 2022, 86S8 2026, 6E** 202S1 3628 202CI 613** 202EI OC43 20321 6E** 20341 OC68 PAGE - S4 203A, 203CI 203EI 20421 203A* 2032* 202C* 2026* 201E* 201S* 20441 20461 204AI 204CI 204EI 20521 2056, 205S1 205S1 205S1 2012* 205S1 205AI 205CI 20S01 20S01 20641 20SS1 206AI 206EI 20701 20721 2076, 207S1 207AI 207E, 20821 20861 20881 2070* 208C, 208E, 2092, MOVE.L CMP.L 8NE.S 0004 MOVE.W LSR.W ANO.W GETLOGN MOVE.L MOVE.L 8TST 8NE 003C F"F"60 4000 # **** 02,04 #3,04 #$3C, 04 Al -160(AS),Al 0(A1,04.W),OS 02,05 F'TCHORX validate directory (AO (A) 5 001A 0010 0006 OOOF' 0002 0016 0200 C800 0018 MONITOR MOVE.L LEA CMP.W 8GT.S MOVE.B 8MI.S CMP.B BGT.S MOVE.W CMP.W BGT.S MOVE.W 8MI.S CMP.W 8GT.S CMP.W F'ILE: F'I LPRC 1. TEXT (IS 8CC.S AOO.W AOO.W BRA.S 4:~81 MOVE.L MOVEM.L MOVE.W MOVE.L BSR MOVEM.L BRA.S 48E7 EOAO 3FOO 2FOA 6100 **** 4COF' 0507 6086 2092* 209AI 209E, 20AO, 2006* 1F"36* 20A61 20AA, 20AC, 20AEI 20AEI PAGE - (A3 )+, 03 4( Al ),03 115 make sure that the device is logged in 64** 5240 OGF"C 001A 60CA 08 10 16 1e 24 2A 209~ Page 051 ; ex it if dev ice is logged in @uvid, A2 = @dirbuf, 01 = ok, 02 = lunit) #1,00 OELENG(A2),A3 ONUMF"LS(A2),00 I inx: =1 address of first dir entry while linx <= dnumfiles do (i8 OTIO(A3),03 if (length(dtid) >= 0) or (117 #15,03 ( length( dt id) > tid leng) or (il7 F'ST8LK(A3),03 LST8LK(A3),03 (dlastblk < dfirstblk) or (il7 LST8VTE(A3),03 @7 #F'8LKSIZ,0;f @7 #$C800,OACCESS(A3) (dlastbyte <= 0) or (117 (daccess.year >= 100) then (dlastbyte > fblksize) or #1,00 #OELENG,A3 (i6 #0,01 00-02/AO/A2, -(A7) begin ok: =fa Ise; de lentry( I inx, d irbuf ) DO, -( A7) A2,-(A7) OELNTRV (A7)+,00-02/AO/A2 @6 end else linx:=linx+1 if dirbuf has beeen changed then write it back 44 3802 E64C 0244 003C 2260 2A31 05C5 2385 4A41 66** 48E7 3F02 2F"OA 6100 S100 4COF" 4A40 61)00 lA 4246 OC42 62** 316A 06 43EA 2091 2169 OOAO 0170 4COF" 4E5E 4E75 85 F'F'60 4000 # 4000 60AO **** F"950 0506 F"E78 001F" OOOE OOOA 0006 0004 0004 183F" MONITOR ®13 MOVE.W LSR.W ANO.W GETLOGN MOVE.L MOVE.L 8SET MOVE.L TST.W 8NE.S MOVEM.L MOVE.W MOVE.L 8SR BSR MOVEM.L TST.W BNE.S 02,04 #3,04 #$3C, 04 A1 -lS0(AS),A1 O(Al,04.W),05 02,OS OS, 0(A1, 04. W) 01 ®9 011D2/AO/A2, -(A7) 02, -(A7) A2, -(A7) WRTOIR IOEXIT (A7)+,011D2/AO/A2 MOVE.W CMP.W 8HI.S MOVE.W #INOERR,06 #$IF",02 ®13 OEOV8LK(A2),UEOV8LK(AO) LEA MOVE.L MOVE.L OVIO(A2),A1 (A1 ), (AO ) 4(Al), 4(AO) DO log it in if not ok then un i t dirbuf write directory and record iorslt test iorslt ®3 F'TCHORX MOVEM.L (A7)+,OO-OS/AO/A1/A3/A4 UNLK A6 RTS if dev# < 1 then begin compute eov end uVid(unit): =dvid restore registers , VOLSRCH(VAR F'VIO:VIO; LOOKHARO:BOOLEAN; VAR F"OIR:OIRP):INTEGER; F"ILE: F'ILPRC1.TEXT 28 Sep 82 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 20AEI 4E56 20B21 20B21 2060 20B81 4243 20BAI 426E 20BEI 266E 20C21 49EE 20C61 204C 20C81 383C 20CCI 280B 20CEI 51CC 20021 4244 20041 1810 20061 6700 200AI 4246 200CI 5246 200EI OC30 20E41 67** 20E61 B846 20E81 66F2 20EAI 6000 20E4* 08 20EEI 307C 20F41 OC28 20FAI 66** 20FCI 383C 21001 5244 21021 BC44 21041 67'** PAGE - 86 21061 210CI 210EI 21141 21161 211AI 211EI 21221 20FA* 21241 21261 21281 212AI 212CI 21301 21321 21361 21381 213EI 21401 21401 21441 21461 214AI 214CI 214EI 21501 21521 21541 21561 21581 2150* 215AI 215EI 21621 2130* 2114* 210C* OC30 6D** oe30 6E** C7FC 0630 0403 600C 28 4243 3806 5344 67** OC44 62** 49EE 2890 2968 11384 2660 06C3 49EE 11314 5204 B90B 66** 5304 66F8 EMB 60** 00 0643 OC43 63DC 32 4E 56 TPR: MON11. TEXT stack 18 14 12 8 4 o -2 -26 -42 -44 -48 func result (ilFVIO LOOK HARD (ilFDIR Return address Old A6 Device tv id tvid2 slashflag heap top registers: , FFOO FF04 OOOE FFE6 0005 FFFC **** 002F 6000 ***'" 0001 MONITOR CSLASH MOVE.W CMP.B BNE.S MOVE.W (ill ADD. W CMP.W BEQ.S FILE: FI LPRC 1. TEXT CMP.B BLT.S CMP.B BGT.S MULS AOO.B SUB.B BRA.S 0030 4000 0039 4000 OOOA 4000 0030 0007 FFD6 0004 0004 FF88 # FF06 0020 OOEO ok physunit lunit device & index temp copy of A3 temp VOLSRCH LINK GETNP MOVE.L CLR.W CLR.W MOVE.L LEA MOVE.L MOVE.W MOVE.L OBF CLR.W MOVE.B BEQ CLR.W LSLASH AOO.W CMP.B BEQ.S CMP.W BNE.S BRA FFF4 FrOO 0001 FF04 0026 0001 DO 01 02 03 04 05 06 07 @5 AO A1 A2 A3 A4 AS A6 A7 A6,#-48 -48( A6 ) -12(A5), -48(A6) 03 -44( A6 ) 14(A6 kA3 -26(A6),A4 A4,AO #24/4-1,04 (A3 )+, (A4)+ (ilfvid & (iltvid (ilutable fdir (ilfdir & temp temp global ptr local ptr SP device:=O ; slashflag:=false (ilfvld (iltvid save lItvid copy fvid to tvid 04,~1 04 (AO),04 BRVOLSX 06 #1,06 #' I' ,O(AO,06.W) CSLASH 06,04 LSLASH OEVNUMB #l,-44(A6) #' &' , 1( AO) (il2 #1,04 #1,04 04,06 CHKOEV #'0' ,0(AO,04.W) BRVOLSX #'9',0(AO,04.W) BRVOLSX #10,03 0(AO,04.W),03 #' 0',03 @1 CLR.W MOVE.W SUB.W BEQ.S CMP.W BHI.S LEA MOVE.L MOVE.L MOVE.B GETDTBL MOVE.L ADD.W LEA MOVE.B ADO.B CMPM.B BNE.S SUB.B BNE.S LSR.W BRA.S 03 06,04 #1,04 OELOEV #7,04 BRVOLSX -42(A6),A4 (AO ), (A4 ) 4(AO),4(A4) 04, (A4) A3 -120(A5),A3 03,A3 -42( A6 ), A4 (A4),D4 #1,04 (A3 )+, (A4 )+ @5 #1,04 ADD.W CMP.W BLS.S #ONTRYSZ,D3 #MAXOEV*DNTRYSZ,03 get length of tvid is nextchar a slash slashflag:=true if firstchar = '&' then while true do begin index:=index+1 exit if nextchar is slash if nextchar in DIGITS then device:=device*10 device:=device+ord(nextchar) dev ice: =dev ice-ord(' O' ) end device:=O*DNTRYSZ go delete slash if length(devname) exit if length(devname) tVid2:=tvid truncate tvid2 to just devname address of nth devname address of tvid2 number of bytes to compare @4 #OEVNSHF,03 OELOEV @3 > 7 found match a 28 Sep 82 TPR: MON11. TEXT 2008* DOSC 21641 6000 **** 2104* 62 21681 EB4B 216AI 216AI 2660 FF88 216EI 284B 21701 D8C3 21721 EA4B 21741 1814 21761 5204 21781 B90B 217AI 66** 217CI 5304 217EI 66F8 2180, 4243 217A* 06 2158* 28 PAGE - 87 MONITOR 212A* 56 21821 4244 21841 1810 21861 9846 21881 67DA 218AI OC44 218EI 62D4 21901 5246 21921 2F08 21941 3F06 21961 3F04 21981 2F08 219AI 6100 20EC* 00B2 219EI OC43 21A21 62CO 21A41 EB4B 21A61 67** 21A81 3i07C 21A6* 0'6 21AEI 3043 21B21 21B21 2.260 21B61 246E 2IBAI 2 64A 21BCI 4293 21BEI 2AOB 21COI 4280 21C21 4281 21C41 Oe28 21CAI 66** 21CCI OC10 21DO, 67** 21D21 7001 2104, 4242 21D61 7602 21D81 21D81 OC30 210EI 60** 21EO, OC30 21E61 6E** 21ESI C5FC 21ECI D430 21FOI 0402 21F41 60** 21E6* OE 210E* 16 21F61 4280 21F81 60** 21F4* 04 21FAI 5243 21FCI B610 21FEI 6F08 21F8* 06 PAGE - 88 BRVOLSX BRA VOLSRCX CHKDEV #DEVNSHF,D3 A3 -120(A5),A3 A3,A4 # t§l1 address of zeroth devname D3,A4 address of' nth devname #DEVNSHF,D3 (A4),04 #1,04 (A3 )+, (A4)+ DELDEV #1,04 number of bytes to compare (n 03 FILE: FILPRC1.TEXT DELDEV 0007 FC88 0007 CLR.W MOVE.B SUB.W BEQ.S CMP.W BHI.S ADD.W MOVE.L MOVE.W MOVE.W MOVE.L BSR D4 (AO),04 D6,D4 BRVOLSX #7,04 BRVOLSX #I,D6 M'T7! delete device name from tvid exit if' length( fv id )=0 exit if' length( fv id »7 amount to delete D6,- A7 D4,- A7 AO,~- A7 TTLCOPY 0001 OOOC OEVNUMB CMP.W BHI.S LSL.W BEQ.S MOVE.W #MAXDEV,D3 BRVOLSX #DEVNSHF,03 @O #1, 12( A6 ) FFFE @O MOVE.W GETUTBL MOVE.L MOVE.L MOVE.L MOVE. L MOVE.L MOVE.L MOVE.L CMP.B BNE.S CMP.B BEQ.S MOVE.L MOVE.W MOVE.L D3, -2( A6 ) Al -70) AS ), A1 8(A6 ,A2 A2,A3 #NIL, (A3) A3,D5 #O,DO #0,01 #35,1(AO) @5 #1, (AO ) ij)5 #1,00 #0,02 #2,D3 CMP.B BLT.S CMP.B BGT.S MULS ADD.B SUB.B BRA.S #'0' ,0(AO,D3.W) @2 #' 9', O(AO, D3. W) ®2 #10,D2 0(AO,D3.W),D2 #'O',D2 ®3 ®2 MOVE.L BRA.S #O,DO ®4 ®3 ADD.W CMP.B BLE.S #1,D3 (AO),D3 ®1 index:=index+l unt i 1 (index> len( tv id» MOVE.L BEQ.S TST.W BEQ.S CMP.B BGT.S OR.W DO,D1 @5 D2 ®2 #MAXU,D2 ®2 -2( A6 ),02 physunit:=ok and (lunit in 1.. MAXU ) MOVE.W BRA.S #0,12(A6) LNFVIDO TST.W BNE.S CLR.W BRA.S -44( A6 ) ®12 02 :IDS FFBA 0008 # 1 22001 22021 22041 22061 22081 220CI 220EI 22121 22121 22161 2202* 2100* 21CA* 22181 221S, 221CI 221EI 22201 LSL.W GETDTBL MOVE.L MOVE.L ADD.W LSR.W MOVE.B ADD.B CMPM.B BNE.S SUB.B BNE.S CLR.W Page 053 0023 0001 0001 0030 3000 @1 0039 3000 OOOA 3000 0030 MONITOR 2200 67** 4A42 67EE OC02 0014 6EE8 846E FFFE reflect shifted dev# in -2(A6 ) @utable get @fdir copy the address f'dir:=nil save A3 in D5 ok:=f'alse ph!:lsUnit:=false if' (tv id[l ]=' #' ) and ( length( tv id )<>1 ) then ok:=true lunit:=O index: =2 repeat if tv id[ index] in DIGITS then lunit:=lunit*10 lun it: = lun i t+ord~ tv id[ index]) lunit:=lunit-ord '0') else ok:=f'alse exit repeat loop (ie. not ok) or not ok FILE: FILPRC1.TEXT ®4 426E OOOC 60** 14 46 4C ®5 4A6E FFD4 66** 4242 60** shif't dev# to higher bits if dev# <> 0 then lookhard:=true lunit:=lunit ORed dev#*32 if physunit then lookhard:=false goto Infv idO ok:=false if not slashflag then dev#:=O 28 Sap 8.2 221C'" 04 22221 342E 2220'" 04 22261 0642 222AI 222AI OC42 222EI 62"'''' 22301 3C02 22321 CDFC 22361 49Fl 223AI 60"'''' 222E'" OC 223CI 3F02 223EI 223EI 2B60 22421 6100 22461 49F4 224AI 341F 223A'" 10 224CI 2648 224EI 1B14 22501 5204 22521 B90B 22541 66** 22561 5:W4 22581 66F8 225AI 3[)42 225EI 026E 22641 7001 22661 60*'" 2254* 12 22681 5342 226AI 3F02 226CI 025F 22701 6688 22721 4A6E 22761 66"'* PAGE - ·89 22781 0642 227CI OC42 22801 66A4 22821 22821 22821 2276* OA 2266* 1A 2216* 6A 22821 4A40 22841 67** 22861 6100 228AI 67** 228CI 228CI 2B6E 22921 6100 22961 4A06 22981 66** 229AI 2645 229CI 268A 229EI 7001 22AOI 2648 22A21 49EA 22A61 4A41 22A81 67** 22AAI 260C 22ACI 260C 22AEI 60"'* 22A8* 06 22BOI 1814 22B21 B90B 22841 66"'* 22B61 5304 22B81 6AF8 22BAI 60** 22B4* 06 2298* 22 228CI 4280 22BA* 02 22AE* OE 228A'" 32: 2284* 38 22BEI 4A40 22COI 66"'* 22C21 4A6E 22C6t 67"'* 22C81 7414 22CAt 046E 22CEI 61.00 22021 67** 22041 OC42 22081 63"'* 220AI 4840 220CI 3002 220EI 4840 PAGE - 90 TPR: MON11. TEXT FFFE 1il12 0014 1il8 @6 AOO.W #MAXU, 02 #$1F,02 (il10 02,06 #UTBLSIZ,06 UVIO(A1,06),A4 1111 (il10 MOVE.W GETUT17 MOVE.L BSR LEA MOVE.W 02,-(A7) A4 -164(A5), A4 UT17IOX UT17VIO(A4,02),A4 (A7 )+, 02 (ill 1 MOVE.L MOVE.B AOO.B CMPM.B BNE.S SUB.B BNE.S MOVE.W ANO.W MOVE.L BRA.S AO,A3 (A4),04 #1,04 (A3 )+, (A4)+ (17 #1,04 (!l9 02,-2( A6 #$1EO, -2 A6) #1,00 LNFVIOO @tvid if tVid=utablet[lunit].uvid then SUB.W #1,02 02, -(A7) #UF, (A7 )+ (!l6 -44(A6) LNFVIOO lunit:=lunit-1 OOOC 6000 # (il9 FFFE OlEO FFFE (!l7 .MOVE.~ 001F FF04 MONITOR ANO.W BNLS TST.W BNE.S FILE: FI LPRC 1. TEXT FF"DO FFF4 FCOE 0006 LNFVIOO TST.W BEQ.S BSR BEQ.S PUTNP # MOVE.L BSR TST.B BNE.S MOVE.L MOVE.L MOVE.L MOVE.L LEA TST.W BEQ.S MOVE.L MOVE.L BRA.S @1 @9 @2 OOOC FFFE FB96 001F MONITOR 2: lunit:=maxunit repeat (iluvid 1 begin ok:=true; goto InfvidO end unt i I ok or lunit=O if not slashflag then begin ADO.W #$20,02 CMP.W #$20* , 02 8NE.S @8 Enter here III i th: and -2( A6 ) 1~ lunit = dev#*32+unit# or 2 ok = false 0020 0100 FBOE -2(A6),02 CMP.W BHI.S MOVE.W MULS LEA BRA.S 001F FF5C FC48 2000 MOVE.W Pege 054 DO NOTOKLH UNITISB NOTOKLH -48( A6 ) -48(A6), -12(A5) F"TCHOIR 06 (!l2 D5,A3 A2, (A3 ) #1,00 AO,A3 OVIO( A2 ), A4 01 (!l1 ~A4 A4 ~+, +, ~A3 A3 ~++ NOTOKLH dev#:=dev#+l if dev#<>8 then goto 2 end dev#"'32 if ok then if un it is not blocked then goto notoklh else ftchdir( lunit, fdir) if iorslt=O then update ptr to directory ok:=true @tvid @dvid if physunit then begin tVid:=fvid end else MOVE.B CMPM.B BNE.S SUB. 8 BPL.S BRA.S ~A4~, 04 A3 +, (A4)+ (il2 #1,04 @9 NOTOKLH ok:=tvid=fdirt[O].dvid MOVE.L #0,00 ok:=false NOTOKLH TST.W BNE.S TST.W BEQ.S @1 MOVE.L @6 ADO.W BSR BEQ.S CMP.W BLS.S SWAP MOVE.W SWAP FILE: FILPRC1.TEXT DO FIXFVIO 12( A6 ) FIXFVIO #MAXU,02 -2(A6),02 UNITISB ®7 #$lF,02 @2 DO 02,00 DO ok:=true if not ok and lookhard then 1: lunit:=maxunit repeat if un it is blocked then if (dev ice=O) or 28 Sap 82 22EOI 6100 22E41 67** 22E61 2208* OC 22ESI 2BSE 22ECI S100 22FOI 4A06 22F21 66** 22F41 2S45 22F61 268A 22F81 2648 22FAI 49EA 22FEI 1814 23001 5204 23021 B90B 23041 66** 23061 5304 23081 66F8 230AI 3042 230EI 60** 2304* OA 22F2* 1C 22E4* 2A 2202* 3C 23101 4280 23121 946E 23161 5342 23181 66BO 231AI 4A6E 231EI 66** 23201 066E 23261 OC6E 232CI 669A 231E* OE 22C6* 66 22CO* 6C 232EI 4A40 23301 67** 23321 3042 23361 OC42 233AI 62** 233CI 3C02 233EI CDFC 23421 49Ft 23461 209C 23481 215C 233A* 10 230E* 3C 234CI 286E 23501 4214 23521 4A10 23541 6700 23581 6100 235CI 66** 235EI 264C PAGE - 91 23601 23621 23641 235C* 23641 23681 236CI 236EI 23701 23721 23761 23781 237CI 237EI 23801 23821 23841 23881 238AI 2362* 238EI 23901 23921 23941 23961 23981 23981 239CI 239EI 239C'" 23AOI 23A21 23A21 23A21 237A'" 2356'" TPR: MON1l. TEXT F3BA FFOO FFF4 FBB4 # 0006 0014 1317 FFFE FF04 0020 FFFE 0100 FFFE OOOC 6000 0004 **** FBOC MONITOR @O FF88 FFFE # 4000 **** @1 OOOE 002F OC13 OOOF 62"'* SO"'* 02 4E4F MOVE.L BSR TST.B BNE.S MOVE.L MOVE.L MOVE.L LEA MOVE.B AOO.B CMPM.B BNE.S SUB.B BNE.S MOVE.W BRA.S -48(A6), -12(A5) FTCHOIR 06 ®7 05,A3 A2, (A3) AO,A3 OVIO(A2),A4 (A4 ), 04 #1,04 (A3 )+, (A4)+ ®7 #1,04 02, 20{ AS) COEVVOL MOVE.L SUB.W SUB.W BNE.S TST.W BNE.S AOD.W CMP.W BNE.S #0,00 -2(A6),02 #1,02 ®S -44(A6 ) FIXFVIO #S20, -2(AS) #S20* ,-2(A6) 1311 COEVVOL MOVE.L CLR.B TST.B BEQ BSR BNE.S ®5 MOVE.L FILE: FILPRCl. TEXT 4AIC 60** 06 2660 382E EA4C 67EE EB4C 47F3 1818 6700 091C 180B 5:304 66FA 266E 5213 18FC 2A 1818 0913 1808 5304 66FA CHECKCO ®7 -48( A6 ) FIXFVIO TST.W BEQ.S MOVE.W CMP.W BHI.S MOVE.W MULS LEA MOVE.L MOVE.L 0014 001F OOOE BSR BEQ.S PUTNP ®2 @3 @4 0028 004C (harddisk or memory) then ftchd ir{ lun it, fd ir) iors It=O then if update ptr to directory ®tvid ®dvid if tvid=dvid then (1)9 volsrch:=lunit, and exit else ok:=false lunit:=lunit-l until ok or lun it=O if not slashflag then begin dev#:=dev#+l if dev#<>8 then go to 1 end DO VOLSRCX 02,20(A6) #$lF,02 COEVVOL 02,06 #UTBLSIZ,06 UVIO(A1,OS),A4 ~ A4 ~+, (AO ) A4 +, 4(AO) exit if not ok 14( A6 ), A4 fv id: =' , ~:6 ~ exit if length( tv id )=0 VOLSRCX UNITISB ®O A4,A3 TST.B (A4 )+ BRA.S 1312 GETDTBL A3 MOVE.L MOVE.W LSR.W BEQ.S LSL.W LEA MOVE.B BEQ AOO.B MOVE.B SUB.B BNE.S MOVE.L ADO.B MOVE.S -120)A5),A3 -2(A6 ,04 #OEVNSHF, 04 @5 #OEVNSHF,04 OEVNAME(A3,04.W),A3 (A3)+,04 VOLSRCX 04, )A4t (A3 +, A4)+ #1,04 ®1 14(AS),A3 #1, (A3) #' /', (A4)+ MOVE.B AOO.B MOVE.B SUB.B BNE.S (AO 04 04, A3( (AO)+, A4)+ #1,04 ®3 CMP.B BHI.S BRA.S #15, (A3) ®4 VOLSRXT TRAP #SF error exit Page 055 t, volsrch:=lunit if dev# = 0 then begin li)uvid tVid:=uvid end if un it is blocked then begin address of device name concat devname to fVid concat slash to fVid end concat tvid to fVid 28 Sap 8:2 TPR: MON1i. TEXT 2330* 70 2166* 023C 23A21 206E OOOE 23A61 4210 23ABI 426E 0014 239E* OC 23ACI 4ESE 23AEI 20SF 23801 OEFC OOOC 23841 4EOO 23861 23861 23861 23861 23861 23861 23861 23861 23861 PAGE - 92 MONITOR 23861 23861 4E56 238AI 226E 238EI 426E 23C21 761A 23C41 206E 23C81 3229 23CCI 67** 23CEI 02FC 23021 48E7 23061 2849 23081 2648 230AI 4242 230CI 1410 230EI B90B 23EOI 66** 23E21 S342 23E41 64F8 23E61 5049 23E81 4COF 23ECI 60** 23EO* DC 23EEI 4COF 23F21 02FC 23F61 0643 23FAI S341 23FCI 6604 23FEI 60** 23EC* 12 24001 302E 24041 3429 24081 0242 240CI OC42 24101 56C2 24121 0242 24161 B440 24181 67** 241AI 5C49 241CI 6004 2418* 04 241EI 3043 23FE* 22 23CC* 54 24221 4E5E 24241 20SF 24261 OEFC 242AI 4EOO 242CI 242CI 242CI 242CI 242CI 242CI 242CI 242C, PAGE - 93 VOLSRCX MOVE.L CLR.8 MOVE.W 14(AS), AO (AO) #0,20(A6) VOLSRXT UNLK MOVE.L AOO.W JMP A6 (A7 )+, AO #12,A7 (AD) Page 056 fv id: =" volsrch:=O pop return address delete parameters OIRSRCH 18 14 12 8 4 , FILE: FILPRC1.TEXT o func result ®FTIO FINOPERM @FOIR Return address Old A6 , OIRSRCH LINK MOVE.L MOVE.W MOVE.L MOVE.L MOVE.W BEQ.S AOO.W OIRSRL~ MOVEM.L . MOVE. L MOVE.L CLR.W MOVE.B lil CMPM.B 8NE.S SU8.W 8CC.S SU8.W MOVEM.L 8RA.S 0000 0008 0014 OOOE 0010 0020 0018 1800 1800 001A 001A ®2 li3 OOOC 0018 FEOO C800 0001 AS, #0 8(AS},A1 #0, 20( AS} #OELENG,03 14(A6 ). AO ONUMFLS(Al},01 OIRSRCX #OELENG+OTI 0, A1 A3/A4, -(A7) Al,A4 AO,A3 02 (AO},02 (A3 )+, (A4 )+ ®2 #1,02 get ptr to dirbuf return 0 as default initialize offset point AD at the filename get number of files number of files = 0 ? point A1 at first entry save A3 and A4 A4 is used for title compare A3 is title to look for length of name in bytes check each byte for equal compare length+l bytes (ill #OTIO, A1 (A7 )+, A3/A4 found it leave A1 at start of entry restore A3 and A4 (14 MOVEM.L AOO.W AOO.W SU8.W BNE.S BRA.S (A7}+,A3/A4 #OELENG,A1 #OELENG,03 #1,01 OIRSRLP OIRSRCX restore A3 and A4 skip to neKt dir entry also update offset any files left? MOVE.W MOVE.W ANO.W CMP.W SNE ANO.W CMP.W BEQ.S AOO.W 8RA.S 12(A6),00 OACCESS(Al),02 #$FEOO,02 #$C800, 02 02 #1,02 00,02 if findperm = daccess.year<>100 then MOVE.W 03, 20(AS) 0014 ®S OOOC DIRSRCX UNLK MOVE.L ADO.W JMP file not found ®s #DTID, A1 ®3 A6 (A7)+,AO #12,A7 (AD) dirsearch:=offset pop return address delete parameters . INCLUDE FILPRC2.TEXT FILENAME FILPRC2 ; MONITOR 242CI 242CI 242CI 242C, 242C, 242CI 242CI 242CI 242CI 242CI 242CI 4ES6 0000 24301 24301 2060 FFFC 24341 4210 24361 2:26E 0008 243AI 4A29 OOOA FILE: FILPRC2.TEXT FRESET(VAR F:FI8) stack: # F 4 Return Address Old A6 o , FRESET B LINK GETSYSC MOVE.L MOVE. 8 MOVE.L TST.8 AS,#O AO -4(AS),AO #0, (AO ) 8(A6).Al ;'ISOPEN(Al) iorslt:=inoerror if fisopen then TPR:MONll.TEXT 28 Sep 82 243EI 67** 24401 2F09 24421 6100 24461 226E 244AI 4A69 244EI 6F"'''' 24501 4A69 24541 66"'''' 24561 2F09 24581 6100 245CI 60""" 2454'" 08 245EI 337C 245C'" 06 244E'" 14 243E'" 24 24641 4E5E 24661 205F 24681 584F 246AI 4EOO 246CI 246CI 246CI 246CI 246CI 246CI 246CI 246CI 246CI 2444'" 0028 246CI 4E56 24701 2:26E 24741 4:269 24781 4229 247CI 4:229 24801 4A29 24841 6700 24881 3029 248CI B069 PAGE - 94 24901 50CO 24921 6e"'''' 249~ 3369 2492* 06 249AI 4AG9 249EI 6700 24A21 4A40 24A41 66""" 24A61 3229 24AAI B269 24AEI 66"'''' 24BOI 3429 24B41 B469 24B81 6F''''''' 24BAI 7001 24A4'" 16 24BCI 3369 24B8'" 08 24AE'" 12 24C21 4A69 24C61 67"'''' 24C81 4269 24CCI 337C 24021 4A40 2404, 67"'* 24061 41E9 240A, 00E9 240EI 363C 24E21 9669 24E61 67*'" 24E81 4218 24EAI 5343 24ECI 66FA 24E6'" 06 2404'" 18 24EEI 3FOO 24FOI 3029 24F41 41E9 24F81 2208 24FA\ 343C 24FEI 41E9 2502\ 3610 2504, 0669 25081 5343 250AI 6100 250E\ 301F 25101 67"'''' 25121 226E 25161 41E9 251AI oe68 25201 66"'''' 25221 3029 2526\ E258 25281 64"'''' *"'** 0008 0008 0006 "'''''''* 0001 0006 @1 BEQ.S MOVE.L BSR MOVE.L TST.W BLE.S TST.W BNE.S MOVE.L BSR BRA.S FRESETX A1,-(A7) RESETER B(A6),A1 FRECSZ(A1 ) FRESETX FSTATE( A1 ) @1 Al,-(A7) FGET FRESETX MOVE.W #1,FSTATE(A1) FRESETX UNLK MOVE.L AOO.W JMP Page 057 reseter(F) if frecsz>O then A6 (A7 )+, AO #4.A7 (AO) RESETER(VAR F:FIB) stack: 0000 0008 OOlA 0005 0004 OOOB "'''''''''' 0016 0018 MONITOR RESETER LI NK MOVE.L MOVE.W MOVE.B MOVE.B TST.B BEQ MOVE.W CMP.W FILE: FILPRC2.TEXT 0018 0016 0038 "'''''''''' 0016 0018 003C 003A 8 F 4 o Return Addre$s Old A6 AS,#O 8(A6),Al #0, FREPCNT(A1) #O,FEOF(Al) #0,FEOLN(A1) FI SBLKO( A1 ) RESETRX FMAXBLK(Al),OO FNXTBLK(A1),OO frepcnt:=O feof:=false feoln:=false if fisblkd then SLT BGE.S MOVE.W DO @1 FNXTBLK(A1),FMAXBLK(A1) bigger:=fnxtblk>fmaxblk if bigger then fmaxblk:=fnxtblk TST.W BEQ TST.W BNE.S MOVE.W CMP.W BNE.S MOVE.W CMP.W BLE.S MOVE.L FSOFTBF(Al) @7 DO if bigger then fmaxbyte:=fnxtbyte FMAXBLK(Al),D1 FNXTBLK(Al),Dl @3 FNXTBYT(A1),D2 FMAXBYT(A1),D2 @3 #1,00 (1)2 003C 003A ®2 MOVE.W FNXTBYT(Al),FMAXBYT(Al) 003E ®3 TST.W BEQ.S MOVE.W MOVE.W TST.W BEQ.S LEA ADO.W MOVE.W SUB.W BEQ.S MOVE.B SUB.W BNE.S FBFCHNG(Al) @6 #O,FBFCHNG(Al) #1,FMODIFD(A1) DO ®4 MOVE.W MOVE.W LEA MOVE.L MOVE.W LEA MOVE.W AOO.W SUB.W 8SR MOVE.W BEQ.S MOVE.L LEA CMP.W BNE.S MOVE.W ROR.W BCe.S OO,-(A7) FUNIT( Al ), DO FBUFFER(Al),AO AO,Ol #FBLKSIZ,02 FHEAOER(A1),AO FSTBLK( AO ), 03 FNXTBLK(A1),03 #1,03 WRITEIT (A7)+,00 ®6 B(AS),A1 FHEAOER(Al),AO #TEXTFILE,FKINO(AO) @6 FNXTBLK(Al),OO #1,00 @6 003E 0001 001C 0050 003C 0200 003C @5 OOOC 0050 0200 001E 0018 "'''''''''' OOOB DOlE 0003 0004 0018 if softbf then if fnxtblk=fmaxblk then if fnxtbyte>fmaxbyte then bigger:=true fmaxbyte:=fnxtbyte if fbufchngd then fbufchngd:=false fmod if ied: =true if bigger then @5 FBUFFER(A1),AO FNXTBYT(A1),AO #FBLKSIZ,03 FNXTBYT(A1),03 @5 #0, (AO)+ #1,03 fillchar(fbuffer[fnxtbyte], fblkslze-fnxtbyte,O) unitwrite(funit,fbuffer,fblksize, fheader.dfrstblk+fnxtblk-l if bigger and (fheader.dfkind=textfile) and cdd( fnxtb lk) then 28 Sep H2 TPR:MON11.TEXT 252AI S269 0016 PAGE - 95 MONIrOR 252EI 41E9 25321 363C 2536, 5269 253AI 4240 253CI 60AA 2528* 14 2520* 1C 2510'" 2C 24C6'" 76 253EI 226E 25421 337C 24AO'" OOA8 25481 4269 254CI 4A69 25501 67"'''' 25521 41E9 25561 OC68 255CI 66"'''' 255EI 337C 255C'" 06 2550'" 1.2 2486'" aaOE 25641 4E5E 25661 205F' 25681 584F' 256AI 4EOO 256CI 256CI 256CI 256CI 256CI 256CI 256CI 256CI 256CI 256CI 256CI 256CI 4E56 25701 206E 25741 3028 25781 5240 257AI 61"'''' 257CI B06E 25801 6F''''''' 25821 7400 25841 3521 25861 5342 25881 66F'A 258AI 5340 258CI B06E 25901 66F'0 2580* 10 25921 246E 25961 7400 25981 320A PAGE - 96 259AI 5342 259CI 66FA 259~ 0668 25A41 4E5E 25A61 205F 25A81 OEFC 25ACI 4EOO 25AEI 25AEI 25AEI 257A* 32 25AEI 3200 25BOI C3FC 25B41 2248 25B61 02C1 25B8, 2449 25BA, 04FC 25BE, 4E75 25CO, 25CO, 25CO, 25CO, 25CO, 25CO, 25CO, 25CO, 25CO, 25CO, 25CO, 4E56 25C41 206E 25C8, 3628 25CC, 302E 2500, 610C 25D2, B640 AOO.W FILE: FILPRC2.TEXT 0050 0200 0018 #1,FMAXBLK(A1) fmaxblk:=fmaxblk+1 LEA MOVE.W AOO.W MOVE.W BRA.S FBUFFER(A1),AO #FBLKSIZ,03 #1,FNXTBLK(A1) #0,00 ®4 fillchar(fbuffer,fblksize,O) 0008 0200 003C ®6 MOVE.L MOVE.W 8(A6),A1 #FBLKSIZ,FNXTBYT(A1) 0018 0038 ®7 MOVE.W TST.W BEQ.S LEA CMP.W BNE.S MOVE.W #0,FNXTBLK)A1) FSOFTBF(A1 RESETRX FHEAOER(A1),AO #TEXTFILE,FKINO(AO) RESETRX #2, FNXTBLK( A1 ) 001E 0003 0004 0002 0018 Pege 058 RESETRX UNLK MOVE.L AOO.W JMP go do unitwrite fnxtbyte:=fblkslze fnxtblk:=O if fsoftbf and (fheader.dfkind=textfile) then fnxtblk:=2 A6 (A7 )+, AO #4,A7 (AO) INSNTRY(VAR FENTRY:OIRENTRYi FINX:OIRRANGEj FOIR: OIRP) stack: 14 12 8 4 o , 0000 0008 0010 OOOC OOOC OOOE MONITOR 0001 0010 OOOA ®FENTRY FINX FOIR Return Address Old A6 I NSNTRY LI NK MOVE.L MOVE.W AOO.W BSR.S CMP.W BLE.S (ill MOVE. L (1)2 MOVE.W SUB.W BNE.S SUB.W CMP.W BNE.S A6,#0 8(A6), AO ONUMFLS(AO),OO #l,DO SETA1A2 12(A6), DO ®4 #OELENG /2, 02 -(A1),-(A2) #1,02 ®2 #1,00 12( A6 ), DO ®1 @4 14(A6),A2 #OELENG/2,D2 (A2)+,(A1)+ MOVE.L MOVE.L ®3 MOVE.W FILE: FILPRC2.TEXT SUB.W BNE.S ADOI. W XITNTRY UNLK MOVE.L AOO.W JMP #1,02 ®3 #1, ONUMFLS( AO) A6 (A7)+,AO #10,A7 (AO) if dnumfiles+1>finx then for i:=dnumfiles downto finx do fdirt[i+1]:=fdirt[i] fdirt[finx]:=fentry dnumfiles:=dnumfiles+1 SETA1A2 -- common to INSNTRY and OELNTRY 001A 001A SETA1A2 MOVE.W MULS MOVE.L AOO.W MOVE.L AOO.W RTS 00,01 #OELENG,Ol AO,A1 01,A1 Al,A2 #DELENG,A2 OELNTRY(FINX:OIRRANGEj FOIR:OIRP) stack: 12 8 4 , 0000 0008 0010 OOOC OELNTRY LINK MOVE.L MOVE.W MOVE.W BSR.S CMP.W o FINX FOIR Return Address Old A6 A6,#0 8(A6),AO ONUMFLS(AO),03 12(A6),OO SETA1A2 00,03 if finx < dnumfiles then 25041 6F"'* 25061 7400 2508, 320A 250M 5342 250CI 66FA 250EI 5240 25EOI 8043 25E21 66F2 2504'" DE 25E41 4229 0006 25E81 0468 0001 0010 25EEI 4E5E 25FOI 205F 25F21 SC4F 2SF41 4EOO 2SF61 2SFSI 25FSI 25FSI 25F61 25FSI PAGE - 97 MONITOR 2SF61 2SFSI 25FSI 25F61 25FSI 2SFSI 25FSI 25F'SI 25FSI 25F6t 25F6t 25F'SI 25F6t 25F'SI 2SFSt 25F6t 25F6I 25F'61 25F6I 25F'61 2SF6i 25F'61 2:5f'81 25F'Aa 25FQ 25FQ 2SOOI 2602l 2S~ Page 059 TPR:MONll.TEXT 28 S.p 82 tJ3 BLE.S MOVE.L MOVE.W SUB.W BNE.S AOO.W CMP.W BNE.S @3 #OELENG/2,02 (A2 )+, (Al)+ #1,02 @2 #1,00 03,00 @1 MOVE.B SUBI.W UNLK MOVE.L AOO.W JMP #0, OTIO(A1) #1, ONUMFLS( AO ) A6 (A7)+,AO #6,A7 (AO) for i:=finx to dnumfiles-1 do fdirt[i]:=fdirt[i+l] fdirt[dnumfiles].dtid:=" dnumfiles:=dnumfiles-l ENTRTMP(VAR F:FIB) stack: ; 20 func result 16 14 12 8 4 @FTIO FSEGS FKINO FOIR Return Address Old A6 FILE: F'ILPRC2.TEXT o registers: DO 01 02 03 04 05 D6 temp, CURINX temp, FRSTOPEN temp, NEXTUSEO temp, FREE AREA U:SINX,L:OINX LASTI SSEGS 07 . 3602 9641 8654 6F** 4844 3C14 3800 3883 4E75 OA 8CS4 6F'FA 3C03 4844 3800 4844 4E75 260Q 25Ft26011 260"1 260Q 260Q 261_ 26111 261" 261Q 261\Q 0000 261ia 2611ii1 4E56 261" 6100 26m 244F 26211 49EE 262.- 4284 262Q 266E 262_ 3A2B 26$ 204B 2S3Il 4246 26la 4252 26:M1 4A54 263&1 67** 26=- 6A** 26. 34BC 2635- 06 PAGE: - 98 2639 4240 26. 60** 26.0 5240 26.q. 3228 26. DOFC 26«l 3410 26E 61A6 2640- OE 265& 8045 2651 66EE 26s-. 5240 2655 3228 26sr.: 342B FINOMAX MOVE.W SUB.W CMP.W BLE.S SWAP MOVE.W MOVE.W MOVE.W @1 RTS 02,03 01,03 (A4 ), 03 @2 04 (A4),06 00,04 03.(A4) freeerea:=nextused-frstopen @2 CMP.W BLE.S MOVE.W SWAP MOVE.W SWAP RTS (A4).06 @1 03,06 04 00,04 04 if freearea>ssegs then EQU OELENG+2 , RTll FFE4 E266 ENTRTMP LI NK 8SR MOVE.L LEA MOVE.L MOVE.L MOVE.W MOVE.L MOVE.W MOVE.W TST.W BEQ.S BPL.S MOVE.W 0008 0010 0001 MONI TOR , AS, #-RT11 OVFCHK A7,A2 14(A6),A4 #0,04 8(AS), A3 ONUMFLS(A3),05 A3,AO #0,06 #0, (A2) (A4 ) @1 @5 #1, (A2) if freearea>fsegs then sinx:=dinx ssegs:=fsegs dinx:=curinx fsegs:=freearea ssegs:=freearea sinx:=curinx @RT11 @FSEGS s inx: =0, d inx: =0 FOIR lasti:=fdirt[O].dnumfiles ssegs:=O rt11:=false if fsegs<=O then if fsegs O} i: =1 while i <= lasti do begin 1f fdirt[i].dfirstblk fdirf[i-1].dlastblk >= fsegs then d inx: = i i: = last i if fdirt[O].deovblk fdirt[i-1].dlastblk >= fsegs then MOVE.W 00,04 ®9 CMP.W BLT.S CMP.W BEQ.S CMP.W BLT.S #MAXOIR,05 @10 #G, LSTBLK(A3) @12 #MAXOIRB,05 @10 @12 MOVE.W #0,04 MOVE.W BEQ.S LEA SUB.W MULS MOVE.W MOVE.W MOVE.W AOO.W MOVE.W MOVE.L MOVE.L MOVE.W MOVE.B EXT.W MOVE.W PEA BSR MOVE.W MOVE.W MOVE.W MOVE.L MOVE.W MOVE.L BSR MOVE.W 04,00 ®ll if d 1nx<>0 then -OELENG(A6),A1 #1,00 dfirstblk:=fdirf[dinx-l].dlastblk #OELENG,OO LSTBLK(A3,00.L),FSTBLK(A1) F"STBLK(A1),LSTBLK(A1) ; dlastblk:=dfirstblk+fsegs (A4 ),03 03,LST8LK(A1) dfk ind: =fk ind 12( A6 ), FKINO( AI) 16( AG ), AO AO, -(A7) push source address #1,-(A7) push starting index (AO), DO DO push length 00,-(A7) OTIO(AI ) push dst address TTLCOPY dtid:=ftid #F8LKSIZ,LSTBYTE(A1) month: =0, day:=O, year:=100 04,- A7 8( AG , - A7) INSNTRY (A7 )+, 04 MOVE.W UNLK MOVE.L AOO.W JMP 04, 22(A6) A6 (A7 )+, AD #14,A7 (AO) dinx:=lasti+1 if lasti = maxdir then dinx:=O 02 10 3004 67** 43EE 5340 C1FC 3283 3351 3614 0769 336E 206E 2F08 3nC 1010 4880 3FOO 4869 6100 337C 337C 3F04 2F09 3F04 2F2E 6100 381F 52 3D44 4E5E 205F OEFC 4EOO FF"EG 001A 0802 0002 0002 OOOC 0004 0010 0001 0006 F"724 0200 0016 C800 0018 0008 FE52 0016 OOOE @ll ~1~~0\~;0)ACCESS(A1) insntry( Ide, d inx, fd ir ) entrtmp:=dinx WRITEIT -- common point for unitwrites (for debugging) registers on entry: DO un it# 28 Sep 82 272CI 272CI 272CI PAGE - 100 272CI 250C'" 0220 272CI 7C02 272EI 3f"00 27301 6100 27341 4E90 27361 6000 273AI 273AI 273AI 273AI 273AI 273AI 273AI 273AI 273AI 273AI 221f" 273CI 20Sf" 273EI 3428 27421 5242 27441 C5f"C 27481 0642 274CI 0242 27S01 C388 27521 301f" 27541 2F08 27561 7602 27581 6002 275AI 27SAI 275AI 275AI 27SAI 275AI 27SAI 27SAI 27SAI 27SAI 27SAI 27SAI 275AI 275AI 275AI 27SAI 27SAI 27SAI 27SAI 27SAI 4ES6 27SEI 6100 27621 27621 2060 27681 27681 27681 27681 426E PAGE - 101 276CI 276CI 27701 27721 27761 277AI 277CI 27801 27841 27841 27841 277A* 27841 27861 278AI 278EI 27921 27961 279AI 279EI 27AOI 27A21 27A21 27A61 27AAI 27AEI 27AEI 27AEI 27AO'" 27AEI 27BOI 27B41 2060 4,210 226E 4A29 67** 10BC 6000 TPR: MON11. TEXT MONITOR 01 02 03 FILE: ILPRC2.TEXT WRITEIT MOVE.L MOVE.W BSR JSR BRA f"22A f"298 Page 061 address length block #OUTBIT,D6 DO,-(A7) GETUNIT (AO) IOEXIT push unit# note ioexit will do rts WRTDIR -- write directory stack: 8 4 0 UNIT# LDIR RETURN ADDRESS ; WRTDIR 0010 001A 01f"f" f"EOO MOVE.L MOVE.L MOVE.W ADD.W MULS ADO.W AND.W EXG MOVE.W MOVE.L MOVE.L BRA ~A7 ~+, 01 A7 +,AO DNUMFLS(AO),D2 #1,02 #DELENG,D2 #S11,D2 #$f"EOO, 02 D1,AO (A7 )+, DO AO, -(A7 ) #DIRDISK,03 WRITEIT address of directory length dl=address of d ir, AO=return address unit# block f"OPEN(f": FIB; TITLE: TID; OPENOLD:BOOLEAN; JUNK: f"I BP ) stack 18 14 12 8 4 0 -8 -24 -26 -28 -32 -S6 -60 f" TITLE OPENOLD JUNK RETURN ADDRESS Old A6 f"REE8 8 LTID 16 LSEGS lIIord LKIND lIIord LOIR ptr LVID 24 Heaptop ; f"f"C4 E122 f"f"f"4 FiFC4 f"OPEN # LINK BSR GETNP MOVE.L A6,#-60 OVf"CHK -60( A6 ) -12(A5), -60(A6) ; mark (heap top) initialize and test if file is already open f"f"E4 MONITiJR f"f"f"C MOVE.W f"ILE: f"ILPRC2.TEXT # 0012 OOOA OOOC "''''** GETSYSC MOVE.L MOVE.B MOVE.L TST.B BEQ.S MOVE.B BRA #0, -28(A6) AD -4(AS), AO #INOERR, (AO ) 18(A6),A1 f"ISOPEN( A1 ) (11 #INOTCLS, (AO ) f"OPENX ; zero LKIND initialize iorslt if f".fisopen then iorslt:=inotclosed va I idate the title 08 42A7 2f"2E 486E 486E 486E 496E 6100 4ASf" 66** (11 OOOE f"f"C8 f"f"E8 f"f"E6 f"f"E4 F3C2 2060 Ff"f"C 10BC 0007 6000 "'*"'''' # MOVE.L MOVE.L PEA PEA PEA PEA BSR TST.W BNE.S GETSYSC MOVE.L MOVE.B BRA #0, -(A7) ~:~i~J(A7) -24 A6 -26 A6 -28 A6) SCANTTL (A7 )+ @2 AD -4(AS),AO #IBADTTL, (AO ) FOPENX fune push push push push push result @title @lvid @ltid @lsegs @lkind if not seantitle then iorslt:=ibadtitle scan title passed DC 42A7 486E f"f"e8 3F3C 0001 @2 MOVE.L PEA MOVE.W #0, -(A7) -S6( A6 ) #1, -(A7) fune result push IiIlvid push true TPR: MONll. TEXT 28 Sep 82 27B81 486E 27BCI 6100 27COI 301F 27C21 66** 27C41 27C41 2060 27C81 10BC 27CCI 6000 27001 27001 27001 27C2* DC 27001 226E 27041 137C 270AI 4269 270EI 3340 27E21 41E9 27E61 4298 27E81 4298 27EAI 27EAI 41EE 27EEI 43E9 27F21 2.208 PAGE - 102 27F41 27F61 27F81 27FAI 27FEI 28021 28041 28081 280AI 280EI 28121 28141 28181 281AI 281CI 28201 28221 28261 282AI 282EI 28321 28321 28321 28321 28341 28381 283CI 28401 28441 28481 284AI 284CI 284EI 284EI 28521 285S1 285AI 285AI 285AI 284C'" 285AI 285CI 28601 28621 28S61 286AI 286CI 28SEI 28701 28721 28761 287~ 28801 28841 28881 PAGE 288CI 28901 28941 28981 28981 28981 2848* 28981 289AI 289CI 289CI 28AOI 2208 2.208 2208 226E 4269 3400 6106 5 SCz 0202 1342 4241 4A69 56Cl C202 3341 4280 BOAE 6700 4A2E 6700 F'F'EO F8FO FFFC 0009 "'''''''''' PEA BSR MOVE.W BNE.S GETSYSC MOVE.L MOVE.B BRA # -32(A6 ) VOLSRCH (A7 )+, DO @3 AO -4(A5),AO #INOUNIT, (AO) FOPENX Page 062 push @Idir lunit:=volsearch get lunit if lun it=O then iorslt:=inounit now open the file 0012 0001 OOOA 001C OOOC OOOE FFC8 0040 MONITOR @3 MOVE.L MOVE.B MOVE.W MOvE.W LEA 18(A6),A1 #l,FISOPEN(Al) #0,FMOOIFO(A1) OO,FUNIT(Al) FMACHIN(A1),AO 2t=: t ~~g~: MOVE.L MOVE.L MOVE.L MOVE.L MOVE.W MOVE.W BSR SNE ANO.B MOVE.B CLR.W TST.W SNE ANO.B MOVE.W MOVE.L CMP.L BEQ TST.B BEQ ~~g t: ~~i t fisopen:=true fmodified:=false funit:=lunit zero machine name for now currently Ivid is restricted to 16 bytes by vo Isrch (ie. no mach ine name) @lvid LEA -56(A6),AO LEA FOEVVIO(A1),A1 @fdevvid MOVE.L (AO)+,(A1)+ FOEVVIO:=LVIO FILE: FILPRC2.TEXT 0012 0018 F660 1 0001 OOOB 0008 0038 FFEO **"'* FFE8 *"'** ~AO ~+, ~A1 ~+ 18( A6 ), A1 .0,FNXTBLK(A1) 00,02 UNITISB 02 #1,02 02,FISBLKO(A1) 01 FRECSZ(A1) 01 02,01 01,FSOFTBF(A1) #NIL,OO -32(A6),00 @11 -24( A6 ) fnxtblk:=O; fsoftbf is a word fsoftbuf:=uisblkd and (frecsize<>O) if ld ir<>n i I and len( It id )<>0 then till search the directory 42A7 486E 3:F2E 2F2E 6100 4A6E 67** 301F 66** MOVE.L PEA MOVE.W MOVE.L BSR TST.W BEQ.S MOVE.W BNE.S GETSYSC MOVE.L MOVE.B BRA FFE8 OOOC FFEO FB74 OOOC 2060 FFFC 10BC OOOA 6000 "'''''''''' # #0, -(A7) -24( A6 ) 12(A6), -(A7) -32(A6), -(A7) OIRSRCH 12(A6 ) ®6 (A7 )+, DO ®4 AO -4(A5),AO #INOFILE, (AO) FOPEN1 func result push liltid push fopenold push @ldir linx:=dirsearch if fopenold then if I imc=O then iors It: = inof i Ie enter with lin)( * deleng in DO ! OC 7200 206E OOCO 226E 45E9 264A 3608 5341 66FA 4A6E 6600 337C 3F29 2F2E 6100 - 103 ®4 FFEO 0012 001E OOOC """"'''' 0001 00lC OOOC FFEO FEBO MONITOR MOVE.L MOVE.L AOO.W MOVE.L LEA MOVE.L ®5 MOVE.W SUB.W BNE.S TST.W BNE MOVE.W MOVE.W MOVE.L BSR FILE: FILPRC2.TEXT MOVE.L LEA BRA 226E 0012 45E9 001E SOOO ***'" #OELENG/2,01 -32(A6),AO OO,AO 18(AS),A1 FHEAOER(A1),A2 A2,A3 (AO )+, (A3)+ #1,01 @5 12(A6 ) FOPEN2 #1,FMOOIFO(A1) F'UNIT(A1), -(A7) -32(A6), -(A7) WRTOIR 18(A6),A1 FHEAOER(A1),A2 FOPEN2 else compute @Idir+linx with F' with F'HEAOER copy directory to fheader if fopenold then goto F'OPEN2 fmod if ied: =true push funit (same as lunit) push Idir writedir( lunit, Idir) restore registers and goto FOPEN2 open new file 4E 301F 67*'" 2060 FFFC lOBC OOOB @6 # MOVE.W BEQ.S GETSY$C MOVE.L MOVE.B (A7)+,00 @7 AO -4(A5),AO #1 OUPFI L, (AD) if I inx>O then iors It: = idupf i Ie -----,---------------------------------- 28 Sep 82 28A4, 6000 289A* OC 28A81 43EE 28AC, OC29 28B2, S6** 28B4, 137C 28B2* 06 28BAI 42A7 28BCI 486E 28COI 3F2E 28C41 3F11 28C61 2F2E 28CAI 6100 28CEI 301F 28001 66** 28021 28021 2060 28061 10BC 280AI 6000 2800* OC 280EI 3400 28EOI e1FC 28E41 43EE 28E81 OC29 i8EEI 6600 28F21 246E 28F61 04CO 28F81 322A 28FCI 9252 28FEI 0801 29021 67** 29041 .536A 29081 -5341 2902* 06 290AI 5941 290CI 6AOO 29101 3F02 29121 2F2E 29161 6100 291AI 4267 291CI 609C 2830* OOEE 2828* 00F6 PAGE - 104 291EI 29221 29241 292AI 292EI 29321 29341 29381 2932* 293E, 29441 29481 294EI 29521 29521 29521 2896* 2878* 29521 29541 29581 295AI 295EI 2958* 29601 29641 29641 29641 29641 29681 296AI 29701 29741 29781 297CI 297EI 297C* 29821 29861 298AI 298EI 29901 29961 299AI 299CI 299CI 299C, 299CI 29AOI 29A41 45E9 4252 357C 3429 6100 67** 206E 3568 OA 356E 422A 357C 426A TPR: MONlt. TEXT **** (17 FFE4 0000 0001 0005 0001 Cl8 FFE8 FFE6 FFEO F04A FFFC 0008 **** # Cl9 001A FFE4 0003 0001 FF6A FFEO 0002 0000 0002 ~110 FF4C FFEO FCA8 MONITOR 001E FOPEN1 -28(A6), A1 #UNTYPFL,1(A1) (118 #OATAFILE,l(A1) MOVE.L PEA MOVE.W MOVE.W MOVE.L BSR MOVE.W BNE.S GETSYSC MOVE.L MOVE.B BRA ~~4 -\i~7~} -26 AS , -lA7} (Al ,- A7 -32 AS ,- A7) ENTRTMP (A7}+,00 (119 AO -4(A5},AO #INOROOM, (AD) FOPENl MOVE.W MULS LEA CMP.B BNE.S MOVE.L AOO.W MOVE.W SUB.W BTST BEQ.S SUB.W SUB.W 00,02 #OELENG,OO -28(AS}, A1 #TEXTFI LE, 1 (A1 ) @4 -32(AS),A2 00,A2 LSTBLK(A2),01 FSTBLK(A2),01 #0,01 (1110 #1, LSTBLK(A2) #1,01 SUB. W BPL MOVE.W MOVE.L BSR MOVE.W BRA #4,01 liI4 02, -(A7) -32(A6), -(A7) OELNTRY #0, -(A7) @8 if lk ind=untypedf i Ie then lkind:=datafile func result push (IIltid push lsegs push lkind push ldir lin)(:=entertemp if 11n)(=0 then iorslt:=inoroom setup DO with lin)( '" deleng if lkind=te)(tfile then compute @ldir+lin)( if odd(lastblock-firstblock) lastblock:=lastblock-1 if lastblock-firstblock>=4 then copy fheader with lin)( in DO else de lentry( 1 in)(, ld ir) lin)(:=O go set iosrlt:=inoroom FILE: FILPRC2.TEXT (111 7FFF 0002 OOOC F536 FFEO OOOE 0002 FFE4 0004 0006 0200 0016 0018 BRA LEA CMP.B BNE.S MOVE.B Page 063 (112 LEA MOVE.W MOVE.W MOVE.W BSR BEQ.S MOVE.L MOVE.W FHEAOER(Al),A2 #0, FSTBLK( A2) #S7FFF,LSTBLK(A2} FUNIT( A1 }, 02 UNITISB @12 -32(A6),AO OEOVBLK(AO),LSTBLK(A2) with FHEAOER firstblock:=O lastblock:=ma)(int funit (same as lunit) if u1sblkd then MOVE.W MOVE.B MOVE.W MOVE.W -28(A6},FKINO(A2) #0, OTIO( A2 ) #FBLKSIZ, LSTBYTE(A2) #0, OACCESS(A2) dfkind:=lkind dt id: =" lastbyte:=fblksize set date to zero lastblock:=ueovblk setup file size in FMAXBLK OOBC OOOA 4240 4A6E OOOC 67** 302A 0002 9052 06 3340 0016 FOPEN2 (111 MOVE.W TST.W BEQ.S MOVE.W SUB.W #0,00 12(A6 ) @1 FSTBLK A2},00 temp:=lastblock-firstblock MOVE.W OO,FMAXBLK(Al) fma)(blk:=temp temp: =0 if openo Id then LSTBLK~A2),00 do softbuf stuff 4A69 67** 337C 4269 303C 4A6E 67** 302A 04 3340 302A OC40 66** 337C 4A6E 66** 0038 0200 003C 003E 0200 OOOC 0016 003A 0004 0003 0002 0018 OOOC (1)2 TST.W BEQ.S MOVE.W MOVE.W MOVE.W TST.W BEQ.S MOVE.W #FBLKSIZ,FNXTBYT(A1} #0,FBFCHNG(A1} #FBLKSIZ,OO 12(A6 } ®2 LSTBYTE(A2),00 fnxtbyte:=fblksize fbufchngd:=false temp:=fblksize if openo Id then MOVE.W MOVE.W CMP.W BNE.S MOVE.W TST.W BNE.S DO, FMAXBYT( A1 ) FKINO(A2},00 #TEXTFILE,DO @4 #2,FNXTBLK(A1) 12( A6 ) ®4 fmaxbyte:=temp FSOFTBF(A1} @4 temp:=lastbyte if filekind = textfile then fnxtblk:=2 if not fopenold then fill first two blocks of the file with zeros 303C 0100 47E9 0050 220B MOVE.W LEA MOVE.L #FBLKSIZI2, DO FBUFFER(A1),A3 A3,01 address of directory buffer 28 Sep 82 29A6, 29A8, 29AA, 29AC, 2980, PAGE 2984, 2988, 298A, 298E, 29C2, 29CS, 29C8, 29CC, 29CC, 29CC, 299A* 298E* 29S8* 29CC, 2900, 2904, 2906, 290A, 2904* 290C, 29EO, 29EOI 29EO, TPR: MON1l. TEXT 4258 5340 66FA 3029 OOOC 343C 0200 - 105 MONITOR 45E9 3612 48E7 6100 4CDF 5243 6100 ®3 MOVE.W SUB.W BNE MOVE.W MOVE.W FILE: FILPRC2.TEXT DOlE LEA MOVE.W MOVEM.L BSR MOVEM.L AOO.W BSR FOOO F06C OOOF FD62 fill fbuffer with zeroes fil3 unit # length FUNIT( A1 ), DO #F8LKSIZ,02 FHEAOER(A1),A2 FSTBLK(A2),03 00-03, -(A7) WRITEIT (A7)+,00-03 #1,03 WRITEIT block next black if fopenold then freset(f) else reseter(f) 30 3C 62 2F2E 4A6E 67** 6100 60** 06 6100 @4 0012 00 DC FAS4 (i5 FA8E ; ; ; # FFFC (is BSR RESETER . 18~A6~, -(A7) FRESET FOPEN1 freset(F) else reseter(F) if nonzero then backup the fopen (ie. -4\AS),AO (AD FOPENX 18(A6). A1 #0, FISOPEN\A1) #0,FEOF(A1 #0,FEOLN(A1) it fa ded ) if iors It<>O then fisopen:=false feof:=false feoln:=false cleanup and exit FOPENX # OOOE PUTNP -60( AS) MOVE.L UNLK MOVE.L AOO.W JMP -SO(AS), -12(AS) A6 (A7 )+, AO #14,A7 (AO) re lease(heaptop) pap return address delete parameters FCLOSE(F:FIB; TITLE:TIO) stack ; MONITOR 10 8 F FTYPE 4 0 RETURN ADDRESS Old A6 FOUND LOIR LINX FREE24 LVIO Heaptop FILE: F'ILPRC2.TEXT -2 -6 -8 -32 -5S -60 4E5S FFC4 6100 OE74 20S0 22SE 4A29 6700 45E9 4A29 6700 4A2A 6700 OC6E 6S** 3369 02SA 006A 307C 4A69 push F if fopeno ld then 12 AS GETSYSC AO MOVE.L TST.B BEQ.S MOVE.L MOVE.B MOVE.B MOVE.B 0012 OOOA OOOS 0004 FFC4 FFF4 MOVE.L TST.W BEQ.S BSR BRA.S test iors It, FOPEN1 2~EO, 290A* 04 280C* 0104 28A6* 013A 2858* 0188 29EO, 20S0 29E4, 4AI0 29E6, 67** 29E8, 226E 29ECI 4229 29FOI 4229 29F4, 4229 29F8, 29F81 29F8, 29F8, 29E6* 10 27CE* 022A 27AC* 024C 2782* 027S 29F8, 286E 29FEI 4ESE 2AOOI 205F 2A02, DEFC 2AOS, 4EOO 2A081 2A08, 2A08, 2A081 2A08, 2A08, 2A08, PAGE - lOS 2A08, 2A08, 2A08, 2A08, 2A08, 2A08, 2A08, 2A08, 2A08, 2A08, 2AOC, 2A10, 2A10, 2A161 2A1A, 2A1E, 2A221 2A2S1 2A2A, 2A2EI 2A321 2A3S, 2A3C, 2A3E, 2A441 2A4A, 2ASO, 2A5S1 2ASAI 2ASC, #0, (A3)+ #1,00 Page 064 CLOSE FFF4 FF'C4 OOOA OOOA **** DOlE 0008 **** 0006 **** 0003 0008 0018 01FF C800 0001 0038 0016 0018 0018 0008 67*;~ 3369 003C 003A # LINK BSR GETNP MOVE.L MOVE.L TST.B BEQ LEA TST.B BEQ TST.B BEQ CMP.W BNE.S MOVE.W ANO.W OR~W MOVE.W TST.W BEQ.S MOVE.W A6,#-SO OVFCHK -SO(AS) -l2(AS), -60(AS) lO(AS),Al FISOPEN(Al) FCLOSEX FHEAOER~Al),A2 FISBLKO A1) ' . if then ftype=ccrunch then fmaxblk:=fnxtblk daccess.year:=100 hype: =c lock if fsoftbuf then fmaxbyte:=fnxtbyte TPR: MON1L TEXT 2S Sap 82 2ASA* 06 2A3C* 24 2AG21 2F09 2AG41 6100 2AG81 226E 2A6CI 4A69 2A701 66** 2A721 45E9 2A761 302A 2A7AI 0240 2A7EI OC40 2AS21 G7** 2AB41 OCGE 2A8AI 6600 2ABEI 2AB2* OA 2A70* 1C 2ABEI 41E9 2A921 43EE 2A9GI 220S 2A9BI 2208 2A9AI 2208 2A9CI 220B 2A9EI 42A7 2AAOI 486E PAGE - 107 2AA41 4267 2AAGI 48GE 2AAAI G100 2AAEI 301F 2ABOI 22GE 2AB41 45E9 2AB81 B069 2ABCI 67** 2ABEI 2ABEI 2060 2AC21 10BC 2ACGI GOOO 2ABC* OC 2ACAI 4243 2ACCI 7401 2ACEI 20GE 2A021 3:228 2AOGI 264S 2AOSI 06FC 2AOCI B441 2AOEI GIE** 2AEOI 4M3 2AE21 G6** 2AE41 3012 2AESI B053 2AESI G6** 2AEAI 302A 2AEEI BOGB 2AF21 G6** 2AF41 7601 2AF2* 0.2 2AES* DC 2AFGI 5242 2AFBI 06FC 2AFCI GOOE 2AE2* lA 2AOE'" 1£ 2AFEI 4A43 2BOOI 66** 2B021 2B021 2060 2BOGI lOBC 2BOAI GOOO 2BOO* OC 2BOEI 5342 2B101 3042 2B141 OC6E 281AI 66** 281CI 206E 28201 3602 28221 C7FC 28261 3030 282AI 0240 282EI OC40 28321 67** 281A* 18 PAGE - 108 2B341 283AI 2832* 283CI 283EI 28401 28441 283A* 28481 OC6E 66** 08 3F02 2F08 6100 6000 OC 226E (1)1 FAOG OOOA 001C DOlE 0018 FEOO CBOO 0002 DaDS **** 0040 FFCS FFCB MONITOR MOVE.L Al,-(A7) BSR RESETER reseter(F) MOVE.L 10(AG), A1 TST.W if fmodified or FMOOIFO(A1 ) BNE.S @2 LEA FHEAOER~Al~,A2 MOVE.W OACCESS A2 ,00 daccess.year=100 or AND!. W #$FEOO, DO CMP.W #$CBOO,OO BEQ.S fi2 CMP.W #CPURGE, 8(AG) ftype=cpurge then BNE @19 currently IVid is restricted to 1G bytes by volsrch (ie. no machine name) @2 LEA LEA MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L PEA FILE: FILPRC2. TEXT # fi3 FFFA 0010 001A @4 0002 0002 MOVE.W MOVE.L MOVE.L MOVE.W MOVE.L AOO.W CMP.W BGT.S TST.W BNE.S MOVE.W CMP.W BNE.S MOVE.W CMP.W BNE.S MOVE.L #0,03 #1,02 -S(AG), AO ONUMFLS(AO),Ol AO,A3 #OELENG,A3 01,02 if funit<>volsearch( Ivid, false, ldir) then found: =fa lsa I ime:=l get LOIR get #FILES in directory compute LOIRt[l] while linx<=#FILES and not found do @6 03 @G FSTBLK~A2~,00 FSTBLK A3 ,00 (1)5 LSTBLK~A2~,00 LSTBLK A3 ,00 @5 #1,03 tl:=ldirt[linx].dfirstblk=dfirstblk t2:=ldirt[linx].dlastblk=dlastblk found:=tl and t2 #1,02 #OELENG,A3 (1)4 1 inx: = 1 inx+1 @G TST.W BNE.S GETSYSC MOVE.L MOVE.B BRA 03 @7 AO -4(A5),AO #ILSTFIL, (AO) FCLOSEl if not found then SUB.W MOVE.W CMP.W BNE.S MOVE.L MOVE.W MULS MOVE.W ANO.W CMP.W 8EQ.S #1,02 02, -8(AG) #CNORMAL, 8 (AG ) @8 -G( AG ), AO 02,03 #OELENG,03 OACCESS(AO,03),00 #$FEOO,OO #$C800, 00 ®9 1 inx: = I inx-1 # ®7 FFFA 00lA 3018 FEOO C800 iorslt:=ilostfile goto 1 if (ftype=cnormal and Idlrt[linx].daccess.year=100) or FILE: FILPRC2.TEXT @8 CMP.W 8NE.S #CPURGE, S ( AG ) ®10 @9 MOVE.W MOVE.L 8SR BRA 02, -~A7 ~ AO,- A7 DELNTRY ®18 MOVE.L 10(AG), A1 FA7E **** OOOA AD AOD.W ADO.W BRA.S FFF8 0000 0008 0002 0008 + + + @fdevvid @lvid LVIO:=FOEVVIO (1)5 00lA MONITOR AD +, A1 AD +, A1 AD +, A1 #0, -( A7) -5G( AG ) #0, -( A7) -6(AG) VOLSRCH (A7 )+, 00 1O(AG-),A1 FHEAOER(A1),A2 CMP~W FUNIT(A1),00 BEQ.S @3 GETSYSC AD MOVE.L -4(A5),AO MOVE.B #ILSTUNT, (AD) BRA FCLOSE1 OOOA 001E OOOC FFFC OOOG **** ~!~rl~~OI~~il~' MOVE.W PEA BSR MOVE.W MOVE.L LEA FFFA F602 FFFC 0005 **** Page 065 @10 ftype=cpurge then de lentry( I inx, Id ir ) else 28 Sap 82 284CI 45E9 28501 42A7 28521 486A 28561 3F"3C 2B5AI 2F"08 2B5CI 6100 2B601 301F" 2B621 67"'''' 2B641 48CO 2B66191FC 2B6AI B06E 2B6EI 67"'''' 2B701 3FOO 2B721 3FOO 2B741 2F2E 2B7S1 6100 2B7CI 301F 2B7EI B06E 2B821 6C*'" 2B841 536E 2B82* 04 2B6E* 18 2B62* 24 2B8S1 226E 2BSCI 45E9 2B901 362E 28941 C7FC 2B9S1 206E 2B9CI 3030 28AOI 0240 2BMI OC40 2BA81 66** 2BAAI OC6A 2B801 66** 2BB21 2BB21 47EO 2BB61 3553 2BBO* 08 2B8AI 60** 2BAS* 12 28BCI 4A69 2BCOI 66FO 2BC21 3570 28BA* OC 28CSI 3552 PAGE - 109 2BCCI 2BOOI 28041 28081 2BOAI 2BOS* 28EOI 28E61 2BEAI 2BEEI 28F21 28F41 2BF6t 2BFSI 2B46* 2BFAI 2BFEI 2C021 2C061 2ASC* 2A34* 2A2C* 2COAI 2COEI 2C121 2C181 2C1AI 2C1EI 2C201 2C1E* 2C1S* 2BOC'" 2AC8'" 2C22, 2C261 2C2C, 2C32, 2A20'" 2C321 2C3S1 2C3AI 2C3C, 2C3E, 2C401 2C40, 2C401 2C401 2C401 3029 e16A 4A69 67** 3569 06 026A 4269 47E9 49F"0 7000 380B 5340 66FA 0084 226E 3F29 2F2E 6100 017E 0106 OlOE 226E 45E9 OC6E 66** 4A2A 66** 4E71 02 TPR: MONlt. TEXT 001E LEA MOVE.L PEA MOVE.W MOVE.L BSR MOVE.W BEQ.S EXT.L OIVS CMP.W BEQ.S MOVE.W MOVE.W MOVE.L BSR MOVE.W CMP.W BGE.S SUB.W 0006 0001 F"858 001A FFF8 FFFA FA46 FFFS FFFS ~11 OOOA 001E FFF8 001A FFF"A 301S FEOO C800 C800 0018 @14 F"FCA 0018 # 001C if dupinx<>O and dupinx<>linx then 811 DO, -(A7) ~O, -(A7) -6(A6), -(A7) OELNTRY (A7)+,OO -S( A6 ), DO 811 #1, -S( A6 ) de lantry( dup inx, Id ir ) if dupinx volsesrch( IVid, felse, Idir) then found:=false I1n)(:=1 get LOIR get #FILES in d1rector~ compute LOIRf[l] while (lin)«=#FILES) and (not found) do BNE.S MOVE.W CMP.W SNE.S MOVE.W CMP.W SNE.S MOVE.L @4 LSTBLK A3 ,00 ®3 #1,03 AOO.W AOO.W BRA.S #1,02 #OELENG,A3 @2 I inx: = 1 inx+1 TST.W BNE.S GETSYSC MOVE.L MOVE.S BRA.S 03 @5 AO -4( AS), AO #ILSTFIL, (AO ) CANTSTl if not found then iorslt:=ilostfile; goto 1 CMP.W BGT.S MOVE.W BRA.S 02,01 @6 OEOVSLK(AO),04 if linx > #FILES then MOVE.W FSTBLK(A3),04 FSTBLK~A2~,00 FSTBLK A3 ,DO @3 LSTBLK~A2~,OO t1: =( Id ir f[ I in)(]. df irstb lk=df irstb lk ) t2: =( Id ir f [ I imc ]. d lastb lk=d lastb lk ) found:=t1 and t2 lA liE 4M3 66** 2060 FFFC lOBC 0006 60** OA 8242 6E** 3828 OOOE 60** 06 3813 ®4 # til 7 lastavailblk:=ldirf[O].dnumfiles else lastava i Ib lk: =Id ir r[ 1 inx]. df irstb lk 28 Sep 82 2CEC* 02 2CFOI 302A 2CF'41 13044 2CFSI 6C"'''' 2CF81 302A 2CFCI OC40 20001 I;C"'''' 20021 96FC 200S1 3744 200AI 377C 20101 :m44 20141 3F'29 20181 2F2E 201CI 6100 20201 20201 2060 20241 4Al0 20261 6G"'''' 20281 22GE 202CI 45E9 20301 4229 20341 137C 203AI 35GE 20401 357C 204GI 02GA 204C, OOGA 20521 426E 2000'" 54 PAGE - 112 2CF'G'" 205GI 2026* 2CE2* 2CAO* 205C, 20601 20G21 20S~ 5E 307C 34 78 aOBC 4A6E 6G"'''' 137C 137C 20GE, 20GO'" OC 20G~ 2BSE 20741 4E5E 20761 205F' 2078, 5C4F' 207AI 4EOO 207C, 207C, 207C, 207CI 207CI 207CI 207C, 207C, 207CI 207CI 207C, 207CI 207C, 207C, 207CI 207CI 207CI 207CI 207CI 207CI 207C, 207CI 207CI 30GE 20821 30SE 20881 20SE 208EI 31OS9 20941 3iQ2E 20981 OC40 209C, SD"'''' 2D9EI 703F' 209C* 02 20AOI 31040 20A4, C1F'C 20ASI 31040 20ACI 4ASE 20801 67** 20B21 3F'2E 20B61 222E PAGE - 113 20BAI 20BEI 20C21 2DCSI 2DC81 2DCAI 20CS* 2DCC, TPR: MON11. TEXT 0002 @7 001S 0200 001A 0002 0200 0016 FFFS OOOC FF'F'A F'A1C F'F'FC 0008 001E 0005 0001 F'F'F'6 0200 01F'F' C800 OOOE " 0004 0002 0016 0018 0018 MONITOR MOVE.W CMP.W BGE.S MOVE.W CMPI.W BGE.S SUB.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.L BSR GETSYSC MOVE.L TST.B BNE.S MOVE.L LEA MOVE.B MOVE.B MOVE.W MOVE.W ANO.W OR.W MOVE.W LSTBLK(A2),DO if (dlstblk O then goto 1 CANTSTl 8(A6),A1 F'HEADER(Al),A2 #0,F'EOF'(A1) ; feof:=false #1,F'EOLN(A1) ; feoln:=falsa -10( AG), LSTBLK(A2) ; d lstb lk: = lastava i lb lk #F'BLKSIZ,LSTBYTE(A2) ; dlastbyte:=fblksize #$1F'F',OACCESS(A2) #$C800, OACCESS( A2 ) j daccess. year: =100 canstratch:=fals8 #O,14(AG) FILE: BLOCKIO.TEXT 0001 FF'F'E @8MOVE.W #1,-2(A6) F'FF'E CANTSTl TST.W BNE.S MOVE.B MOVE.B CANTSTX PUTNP -2( AG ) CANTSTX #l,F'EOF'(Al) #l,F'EOLN(Al) -60(AS) 0001 0005 0001 0004 F'F'C4 F'F'F'4 Page 068 MOVE.L UNLK MOVE.L AOO.W JMP # BLKIO -60( A6 ). -12( AS) A6 (A7)+,AO #6,A7 (AO) ok:=true release(heaptop) pop return address delete parameters BLOCKREAD ANO BLOCKWRITE stack: 22 18 14 12 10 8 4 o -2 -4 -6 -8 -12 -14 , OOOC 000 A OOOE OOOC OOOC 003F' F'FF'A F'FF'8 F'FF'4 F'FF'2 F'F'F'E 0200 F'F'F'C F'F'F'A F'F'F'2 F'F'F'4 MONITOR 342E F'F'F'C 3S2E F'F'F'8 4ASE 0008 67*'" 7C01 SO** 04 7C02 LOOPIO LOOPIO MOVE.W MOVE.W MOVE.L MOVE.W MOVE.W CMPI. W BLT.S MOVE.L @1 MOVE.W MULS MOVE.W @2 TST.W BEQ.S MOVE.W MOVE.L F'ILE: BLOCKIO.TEXT ~3 Function result File address Buffer address Number of blocks Rei block number Doread Return address Old AG Chunk Chunkslze Nu.blocks Blocknum Index un itnum 121A6l' -6(AG ) 10 A6 ,-8(AG) 14 A6 ,-12(A6 F'UNIT A1),-14(A6) 12(AG ,00 #63,00 @1 #63,00 ~O, -2( A6 ) #F'BLKSIZ,DO ~O, -4( A6 ) -6( A6) copy copy copy coP!:! nblocks to numb locks rblock to blocknum buffer address to index unit number if numblocks > S3 then chunk:=S3 else chunk:=numblocks chunksize:=chunk*blocksize while numblocks<>O do ®S -14(AS), -(A7) -12(AS),01 unit# address MOVE.W MOVE.W TST.W BEQ.S MOVE.L BRA.S -4~AS~, 02 -8 AS ,03 length block# 8(AS) ®3 #INBIT' lOS ®4 if doread then unitread else MOVE.L #OIJTBI T, 106 unitwrite 28 Sep 82 TPR: MON11. TEXT Page 069 -------_._------------------------------------------------.~ 20CA* 02 20CEI 6100 20021 4E90 20041 20041 20GO 20081 4A10 200AI 66** 200CI 302E 20EOI 916E 20E41 302E 20E81 48CO 20EAI D1AE 20EEI 302E 20F"21 [)16E 20F"61 302E 20F"AI B06E 20F"EI 6EAC 2EOOI 3040 2E041 C1F"C 2E081 3040 2EOCI 609E 200A* 32 20BO* 5C 2EOEI 4E75 2E101 2E101 2E101 2ElOI 4E56 2E141 6100 2E181 42AE 2E1CI 2E1CI 20GO 2E201 4210 2E221 22GE 2E261 4A29 2E2AI 66** 2E2CI 10BC 2E301 6000 2E2A* 08 2E341 4ASE 2E381 6BF"2 2E3AI 4A29 2E3EI 6,700 2E421 45E9 2E4S1 4A6E 2E4AI SA** 2E4CI 3069 2E4A* OS PAGE - 114 2E521 2E541 2E581 2E5CI 2E601 2E641 2E661 2E6AI 2E6CI 2E6EI 2E701 2E741 2E761 2E761 2E7AI 2E7EI 2E6A* 2E821 2EB61 2EBAI 2E64* 2EBEI 2E921 2E961 2E981 2E9EI 2E96'" 2EA21 2EA61 2EAAI 2EAEI 2E821 2EB41 2EB81 2E8CI 2E8EI 2EBC'" 2EC41 2ECAI 2ECEI 2E02, 2E061 2EOAI 2EOCI 2EEOI 3012 016E 302E 006E B06A 6F"** 4A6E 66** 42A7 21F'09 6100 4A5F" 2060 2.26E 45E9 16 302A 906E 3040 28 302E B06A 60"'''' 137C 6000 OA 4229 48E7 6100 4COF" 4A10 6600 4A6E 66*'" 337C 06 3[)6E 302E 016E 302E B06A 57CO 0200 1340 EB8C F"F"F"C @4 # F"F"F"E F"F"F"A F"F"F"C F"F"F"4 F"F"F"E F"F"F"8 F"F"F"A F"F"F"E F"F"F"E 0200 F"F"F"C \15 , F"F"F"2 OA6C 0016 F"F"F"C BLKIO # 0012 OOOA 0000 *"""* @O OOOC (tl OOOB **** DOlE OOOA 0018 OOOA MONITOR 0008 F"OCE # 0002 000 A OOOC 000 A 0002 @4 0001 0005 "'''''''''' 0005 ODED F"EOO 0700 @5 "''''*''' 0008 0001 001C OOOC 0018 OOOC 000 A OOOA 0002 0001 0005 GETUNIT (AD) AD -4(A5),AO (AD) @5 -2(A6~'OO 00, -6 A6) -4(A6 ,DO 00 00,-12(AS) -2(A6),OO 00, -8 A6) -6(A6 ,DO -2(A6 ,DO @2 00, -2(A6) #F"BLKSIZ,OO DO, -4( A6 ) @2 get unit# and validate, setup drvr go to driver test jorslt exit loopio if nonzero sub chunk from numb locks add chunksize to index add chunk to blocknum if numb locks < chunk then chunk:=numblocks chunksize:=chunk*blocksize RTS BLKIO LINK 8SR MOVE.L GETSYSC MOVE.L MOVE.B MOVE.L TST.B BNE.S MOVE. B BRA TST. W BMI.S TST.B BEQ LEA TST.W BPL. S MOVE.W A6,#-14 OVF"CHK #0, 22( A6) AD -4( AS ), AD #INOERR, (AO ) 1S( A6 ), A1 F"I SOPEN( A1 ) @1 #INOTOPN, (AD) BLKRXIT default func result gets zero ptr to iosrlt initielize lorslt ptr to F"IB f de open ? not open or • blocks < 0 12( A6 ) # blocks >=0 F"ISBLKO(A1 ) blocked device? @O f))7 F"HEAOER(A1),A2 10( A6 ) ptr to dir entry if rblock < 0 then rblock:=fnxtblk 112 F"NXTBLK(A1),10(A6) F"ILE: BLOCKIO.TEXT 000 A OOOA OOOC 0002 F"F"F"C 0012 DOlE BSR JSR GETSYSC MOVE.L TST.B BNE.S MOVE.W SUB.W MOVE.W EXT.L AOO.L MOVE.W AOO.W MOVE.W CMP.W BGT.S MOVE.W MULS MOVE.W BRA @6 MOVE.W AOO.W MOVE.W AOO.W CMP.W BLE.S TST.W BNE.S MOVE.L MOVE.L BSR TST.W GETSYSC MOVE.L MOVE.L LEA F"STBLK(A2),OO 00. 10~A6 ) 10(A6 ,DO 12(A6 .00 LSTBLK(A2),DO @4 8( A6) @3 #0, -( A7) A1,-(A7) CANTSTR (A7 ) ... AO -4( AS), AD 18( A6 ), A1 F"HEAOER(A1).A2 MOVE.W SUB.W MOVE.W LSTBLK(A2).00 10( A6), DO DO. 12(A6 ) MOVE.W CMP.W 8LT.S MOVE.B BRA 10(A6).00 LST8LK(A2).00 @5 #1. F"EOF" ( A1 ) BLKRXIT MOVE.B MOVEM.L BSR MOVEM.L TST.B BNE TST.W BNE.S MOVE.W #0. F"EOF" ( A1 ) AO-A2.-(A7) LOOPIO (A7) .... AO-A2 (AO) BLKRXIT 8(A6 ) ®6 if not doread then fmodified:=true MOVE.W MOVE.W AOO.W MOVE.W CMP.W SEQ ANO.S MOVE.S 12( A6~. 24( A6 ) 12(A6 ,00 00.10 A6) 10(A6 .00 LSTBLK(A2),OO 00 #1,00 00,F"EOF"(A1) func result gets nblocks rblock:=rblock"'dfirstblk if rblock ... nblocks > dlstblk then if not doread then junk:=cantstretch nblocks:=dlstblk-rblock feaf:=rblock>=dlstblk if iorsit <> 0 then exit #1.F"MOOIF"0(A1) rblock:=rblock ... nblocks feof:=rblock=dlstbik 28 Sep B2 2EE4t 302E 2EESt 9052 2EEAI 3340 2EEEI B069 2EF'21 6F'00 2EF'61 3369 2EF'CI 6000 2E40* OOCO 2F'001 3D6E PAGE - 115 2F'061 4SE7 2F'OAI 6100 2F'OEI 4CDF' 2F'l21 4AI0 2F'l41 67** 2F'161 426E 2F'lAI 60** 2F'l4* 06 2F'lCI 4A6E 2F'201 66** 2F'221 4E71 2F'20* 02 2F'lA* 08 2EF'E* 0026 2EF'4* 0030 2EB6* 006E 2EAO* 0084 2E32* 00F'2 2F'241 4ESE 2F'261 205F' 2F'28t DEF'C 2F'2CI 4EDO 2F'2Et 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F'2EI 2F"2EI 2F'2EI 2F'2EI 2F"2EI 2F"2EI 4E56 2F"321 206E 2F'361 4A28 2F'3AI 67** 2F'3CI 2250 2F"3EI 12AE 2F'421 4A68 2F'461 67** 2F"4SI 21:"08 2F"4AI 6100 2F'4EI 60** 2F'46* DB 2F'501 3028 PAGE - 116 2F'541 2F"561 2F'581 2F"5AI 2F'5EI 2F'601 2F'3A* 2F'601 2F'641 2F'SE* 2F'4E* 2F'681 2F'6AI 2F'6CI 2F'GEI 2F'6EI 2F"6EI 2F"6EI 2F'6EI 2F'6EI 2F"6EI 2F"6EI 2F'6EI 2F'6EI 2F'6EI 2F"721 TPR: MON11. TEXT OOOA 001S 0016 **** 001S 0016 **** MOVE.W SUB.W MOVE.W CMP.W BlE MOVE.W BRA OOOC 0018 MONITOR @7 MOVE.W F'ILE: BlOCKIO.TEXT OOEO F'E70 0700 0018 10( A6 ),00 F'STBLK(A2),00 00,F'NXTBLK(A1) ; fnxtblk:=rblock-dfrirstblk F"MAXBLK(A1 ),DO BLKRXIT . ; if fnxtblk > fmaxblk then fmaxblk:=fnxtblk F'NXTBLK(Al),F'MAXBLK(Al) BLKRXIT 12(A6), 24(A6) ; func result gets nblocks MOVEM.L BSR MOVEM.L TST. B BEQ.S MOVE.W BRA.S AO-A2,-(A7) LOOPIO (A7)+,AO-A2 (AO) (il8 #0,24(A6) BLKRXIT if iorslt <> 0 then TST. W BNE.S NOP 8(A6) BLKRXIT if A6 (A7)+,AO #16,A7 (AO) pop return address delete parameters 0008 ®8 0010 BLKRXIT UNLK MOVE.L AOO.W JMP func result:=O and exit doread then . INCLUDE TEXTIO.TEXT F'i lename text io PROCEDURE F'WRTCHAR(F'ILE:F'IB; CH:CHAR) stack: 10 6 4 o Return address F" i Ie address Character Old A6 ; F'WRTCHAR 0000 0006 OOOA LINK MOVE.L TST.B BEQ.S MOVE.L MOVE.B TST.W BEQ.S MOVE.L BSR BRA.S 0005 0038 **** OOOC MONITOR (ill MOVE.W F'ILE: TEXTIO.TEXT 2209 7401 4243 6100 F'7DO 60** ®2 24 2060 F'F'F'C 30BC 0000 08 18 4E5E SC4F' 4E75 # A6,#0 6(A6),AO F'I SOPEN( AO ) (il2 F'WINOOW(AO),A1 5(A6), (A1) F'SOF'TBF' ( AO ) (ill AO, -( A7) F'PUT F'WRTCHX A1,01 #1,02 #0,03 WRITEU 'F'WRTCHX AD MOVE.L MOVE.W -4(A5),AO #INOTOPN, (AD) unitwrite(funit, fwindowt, 1) A6 #6,A7 stack: 8 4 o F'WRITELN 4ES6 0000 20GE 0004 LINK MOVE.L fput(f) else end else PROCEDURE F'WRITELN(F'ILE:F'IB) , fw indowt [0]: =ch; if fsoftbuf then F'UNIT(AO),OO MOVE.L MOVE.L MOVE.W BSR BRA.S GETSYSC F'WRTCHX UNLK ADO.W RTS with F' do if f isopen then begin A6,#0 4(A6), AO Return address F'ile address Old A6 syscomt. iors It: = inotopen 28 Sap 82 2F761 2250 2F781 12BC 2F7CI 2F08 2F7EI 6100 2F821 4E5E 2F841 584F 2F861 4E75 2F881 2F881 2F881 2F881 2F881 2F881 2F881 2F881 2F881 2F881 2F881 2F881 4E56 2F8CI 2F8CI 2060 2F901 4250 2F921 206E 2F961 OC68 2F9CI 66** 2F9EI 2'F'08 2FAOI 6100 2F9C* 06 2FA41 206E PAGE - 117 2FA81 2250 2FAAI . 1051 2FAEI 317C 2FB41 4E5E 2FB61 4A9F 2FB81 205F 2FBAI 4A5F 2FBCI 4EoO 2FBEI 2FBEI 2FBEI 2FBEI 2FBEI 2FBE\ 2FBE.1 2FBEI 2FBEI 2FBEI 2FBEI 4E56 2FC21 206E 2FC61 4A28 2FCAI 66** 2FCCI 2F'08 2FCEI 6100 2F021 60EE 2FCA* 013 2F041 206E 2F081 317C 2FoEI 4228 2FE21 4E5E 2FE41 584F 2FE61 4E75 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 2FE81 4E~56 2FECI 206E 2FFOI 224F PAGE - 118 2FF21 2FF61 2FF81 2FFAI 2FFCI 2F'FEI TPR: MON11. TEXT MOVE.L MOVE.B MOVE.L BSR UNLK Aoo.W RTS 0000 **** FWINoOWjAO),A1 #$o,(Al AD,-(A7 FPUT A6 #4,A7 Pega 071 f.fwindowt[O]:=chr(eol) fput(f' ) FUNCTION FREAoCHR(FILE:FIB):CHAR stack: Function result (long zero) Return address File address Old A6 12 8 4 o FREAoCHR LINK GETSYSC MOVE.L MOVE.W MOVE.L CMP.W BNE.S MOVE.L BSR 0000 FFFC # 0004 0001 0006 **** 0004 MONITOR @1 MOVE.L FILE: TEXTI O. TEXT MOVE.L MOVE.B MOVE.W UNLK TST.L MOVE.L TST.W JMP OOOF 0001 0006 A6,#0 AO -4(A5),AO #INOERR, (AO ) 4(A6), AO -1, FSTATE(AO) @1 AO,-(A7) FGET s!:jscomt. iors it: =inoerror with f do if fstate=fneedchar then fget(f) 4(A6),AO FWINoOW~AO~.A1 ., (A1),15 A6 #1, FSTATE(AO) A6 r' freadchr:=f~indowt[O] fstata:=fnaadchar 1'7)' A7 + AO AO PROCEDURE FREAoLN(FILE:FIB) stack: 8 4 0 Raturn addrass File address Old A6 REAoLN 0000 0004 0004 @1 **** 0004 0001 0006 0004 @2 LINK MOVE.L TST.B BNE.S MOVE.L BSR BRA.S A6,#0 4(A6),AO FEOLN(AO) @2 AO, -( A7) FGET @1 MOVE.L MOVE.W MOVE.B UNLK Aoo.W RTS 4(A6),AO #1, FSTATE( AO) #0, FEOLN( AD) A6 #4,A7 while not f.eoln do fget(f) f.fstate:=fneedchar f.feoln:=false PROCEDURE FGET(FILE: FIB) stack 8 4 o -2 File Address Return Address Old A6 ch registers 01 02 03 04 05 06 07 noeof device echo amount leftinbuf winim( leftoget ; FoBO 0008 MONITOR 303C 0128 2448 2649 360A 5340 66FA SCANAHo LINK MOVE.L MOVE.L FILE: TEXTIO.TEXT ®O MOVE.W MOVE.L MOVE.L MOVE.W SUB.W BNE.S A6, #-FIBSIZE 8(A6), AO A7,Al #FIBSIZE/2, DO AO,A2 A1,A3 (A2 )+, (A3)+ #1,00 @O with f do currentfib:=f 28 Sap 82 30001 3028 30041 0800 30081 67** 300AI 5268 3008* 04 300EI 317C 30141 48E7 30181 2F08 301AI lilOO 301EI 4COF 30221 4A28 30261 1)7** 30281 303C 302CI 2448 302EI 2649 30301 3408 30321 5340 30341 66FA 30361 117C 303CI 117C 30421 5368 3026* lE 30461 4E5E 30481 205F 304AI S88F 304Cl 4EOO 304EI 301C* 0032 2FOO* 007E 2FA2* OOAC 304EI 4E56 30521 30521 2060 30561 4250 30581 206E 305CI 4A28 30601 6700 30641 4A68 30681 6F** 306AI 5368 306EI 6EOO 3068* 08 30721 43E8 30761 4A68 307AI 6700 307EI 3E28 30821 4246 30841 3028 30881 8068 PAGE - 119 308CI 308EI 30921 30941 30981 309CI 30ADI 308C * 30A21 30AD* 30A61 30AAI 30ACI 30AEI 30BOI 30AE* 30B21 30B41 30B61 30BAI 30BEI 30COI 30C21 30C41 30C61 30C81 30CAI 30CEI 30001 30B4* 30021 30041 30081 30DCI 30DEI 30E21 30E81 30ECI 30FOI 30F21 30F61 30F61 30FAI 300C* 60** 3028 0047 B068 6EOO 3.A29 60** 14 3A3C 04 9A68 3807 B845 6F** 3805 0:2 4A44 6F** 45E8 04E8 2650 06C6 3004 lGOA 5:340 6E>FA 0968 OC44 9E44 1C 4A47 6700 4A68 67** 4268 3117C 48E7 6100 5343 6l1.00 TPR: MON11. TEXT 0018 0000 MOVE.W BTST BEQ.S AOO.W F"NXTBLK(AO),DO #0,00 (111 #1, FNXTBLK(AO) MOVE.W MOVEM.L MOVE.L BSR MOVEM.L TST.B BEQ.S MOVE.W MOVE.L MOVE.L MOVE.W SUB.W BNE.S MOVE.B MOVE.B SUB.W #FBLKSIZ,FNXTBYT(AO) AOIA1, -) A7 ) AO,-(A7 FGET (A7 )+, AO/Al FEOF(AO) @3 #FIBSIZE/2,00 AO,A2 A1,A3 (A3 )+, (A2)+ #1,00 @2 #1, FEOF( AO ) #1, FEOLN( AO ) #1, FNXTBYT( AO) @3 UNLK MOVE.L AOO.L JMP A6 (A7 )+, AO #4,A7 (AO) FGET LINK GETSYSC MOVE.L MOVE.W MOVE.L TST.B BEQ TST.W BLE.S SUB.W BGT A6,_-2 AO -4(A5),AO -INOERR, (AO ) 8(AS), AO FI SOPEN( AO ) FGETNOP FREPCNT (AO ) @l -1, FREPCNT( AO) FGET2L 0018 (11 0200 003C OOCO **** 0300 0005 0128 (112 0001 0005 0001 0004 003C FFFE FFFC # 0008 OOOA **** OOlA 001A **** OOlE 0038 **** 0008 0018 0016 MONITOR @l LEA TST.W BEQ MOVE.W MOVE.W @2 MOVE.W CMP.W F'ILE: TEXTIO. TEXT BLT.S MOVE.W AOO.W CMP.W BGT MOVE.W BRA.S 003C 003A **** 0016 FHEAOER~AO~,A1 FSOFTBF AO FGET2NO FRECSZ(AO),07 #0,06 FNXTBLK~AO~,OO FMAXBLK AO ,DO @3 FNXTBYT(AO),OO 07,00 FMAXBYT(AO),OO FGETlL LST8YTE(Al),05 @4 Page 072 if odd(fnxtblk) then fnxtblk:=fnxtblk+1 fnxtbyte:=fblksize if feof then f:=currentfib feof:=true feoln:=true fnxtbyt:=fnxtbyt-1 syscomL iors It: =inoerror with f do if fisopen if frepcnt>O then frepcnt:=frepcnt-l if frepcnt>O then go to 2 with fheader do if fsoftbuf then leftoget:=frecsz wininx:=O repeat if fnxtblk>=fmaxblk then if fnxbyte+leftoget > fmaxbyte then goto 1 else leftinbuf:= dlastbyte-fnxtbyte 0200 @3 MOVE.W #FBLKSIZ,05 003C (i4 SUB.W MOVE.W CMP.W BLE.S MOVE.W FNXTBYT(AO),05 07,04 05,04 @5 05,04 leftinbuf:=fblksize-fnxtbyte amount:=leftoget if amount>leftinbuf then TST.W BLE.S LEA AOO.W MOVE.L AOO.W MOVE.W MOVE.B SUB.W BNE.S AOO.W AOO.W SUB.W 04 @7 FBUFFER~AOl'A2 FNXTBYT AO ,A2 FWINOOW(AO ,A3 06,A3 04,00 (A2 )+, (A3)+ #1,00 ®6 04, FNXTBYT( AO ) 04,06 04,07 if amount > 0 then TST.W BEQ TST.W BEQ.S MOVE.W MOVE.W MOVEM.L BSR SUB.W BSR 07 FGET3RO FBFCHNG( AD) ®8 #O'FBFCHNG~AOl #l,FMOOIFO AO 04-07/AO-A1,- A7) LOPARMS #1,03 WRITEIT done:=laftoget = 0 if not done then if fbufchngd then @5 0050 003C @6 003C @7 **** 003E 003E 0001 00lC OFCO **** F638 4COF 03FO 6600 .f<*** 20 MOVEM.L (A7)+,D4-07/AO-A1 BNE FGETlL else amount:=leftinbuf src:=fbuffer[fnxtbyte] dst:=fwindowf[wininx] moveleft(src,dst,amount) fnxtbyte:=fnxtbyte+amount wininx:=wininx+amount leftoget:=leftogat-amount fbufchngd:=false fmodified:=true unitwrite(funit,fbuffer, fblksize,dfirstblk+fnxtblk-1 ) if iorslt<>O then goto 1 28 Sap 82 30FEI 48E7 31021 6100 31061 3C3C 310AI 3FOO 310CI 6100 31101 4E90 31121 4COF 31161 6600 311AI 5268 311EI 4268 31221 6000 307C* OOAA PAGE - 120 31261 OC68 312CI 57C3 312EI 66** 31301 :)43C 31341 1,0** 312E* 06 31361 3428 3134'" 04 313AI 323C 313EI 307C 31441 4240 31461 BOS8 314AI 6COO 314EI 4A41 31501 6700 31541 48E7 31581 3F02 315AI 43EE 315EI 2209 31S01 7401 31S21 4243 31641 3C3C 31S81 6100 31SCI 4E90 316EI 4COF 31721 6600 31761 4A03 31781 67** 317AI OC2E 31801 67** 31821 OC2E 31881 60** 3180* 08 318AI 48E7 318EI 3028 31921 43EE 319S1 2209 31981 7401 319AI 4243 319CI 6100 31AOI 4COF 3188* lA 3178* 2A 31A41 C189 31A61 31ASI 2460 31AAI 102A 31AEI B06E 31921 C189 31B41 SS** 31BSI OCS8 31BCI 66** 31BEI 426E 31BC'" 04 PAGE - 121 31C21 31B4* 31C61 31CAI 31CEI 31001 3152* 314C* 3006* 31041 310AI 310E! 31E21 31E8! 31EAI 31EEI 31FO! 31F41 31FAI 31EE* 31FE! 32021 3204! 320AI 323C 10 2470 14AE 5.240 6000 0082 0088 OOFE OCS8 6600 4228 317C 2450 Oe12 66"'* 14BC 117C 6000 OE Oe12 66** Oe68 6F*'" TPR: MONll. TEXT OFCO ~8 "'''''''''' 0001 E84E 03FO "'''''''''' 0018 003C FF60 MONITOR MOVEM.L BSR MOVE.W MOVE.W BSR JSR MOVEM.L BNE AOO.W MOVE.W BRA O4-07/AO-Al,-(A7) LOP ARMS #INBIT,06 00,-(A7) GETUNIT ~~~~+,04-07/AO-Al FGETlL #l,FNXTBLK~AO~ #O,FNXTBYT AO ®2 FGET2NO CMP.W SEQ BNE.S MOVE.W BRA.S 0002 #1, FUNIT( AO ) 03 @1 #2,02 @2 OOOC (ill MOVE.W FUNIT(AO),02 0001 0020 FFFE 112 0008 **"'* ®3 MOVE.W MOVE.W MOVE.W CMP.W BGE TST.W BEQ MOVEM.L MOVE.W LEA MOVE.L MOVE.L MOVE.W MOVE.W BSR JSR MOVEM.L BNE TST.B BEQ.S CMP.B BEQ.S CMP.B BLT.S #1,01 #$0020, -2(AS) #0,00 FRECSZ(AO),OO FGET3RO 01 FGET3RO 00-07/AO-A1,-(A7) 02,-(A7) -2(AS),A1 A1,01 #1,02 #0,03 #INBIT,06 GETUNIT ~AO ~ A7 +,00-07/AO-Al FGETlL 03 @6 #13, -2( AS) @4 #$20, -2(A6) liS MOVEM.L MOVE.W LEA MOVE.L MOVE.L MOVE.W BSR MOVEM.L 00-07/AO-A1,-(A7) FUNIT)AO),OO -2(A6 ,A1 A1,01 #1,02 #0,03 WRITEIT (A7)+,00-07/AO-A1 EXG GETSYSC MOVE.L MOVE.B CMP.W EXG BNE.S CMP.W BNE.S MOVE.W OO,A3 A2 -4~ AS ~,A2 EOF A2 ,DO -2(A6),00 00,A3 ®8 #1, FUN IT ( AO ) ®7 #0, -2(AS) **"'''' FFCO FFFE 0001 E7F2 03FF **** 0000 FFFE 0020 FFFE (14 FFCO OOOC FFFE F58E 03FF @6 # 0001 OOOC FFFE MONITOR unitread(funit,fbuffer, fblks1ze,dfirstblk+fnxtblk) if iorslt<>O then goto 1 fnxtblk:=fnxtblk+1 fnxtbyte:=O until done (loop exit near 1il7) FILE: TEXTI O. TEXT 0001 OOOC FFFC 001F FFFE Pege 073 else echo:=funit if echo then device:=2 device:=funit noeof:=true ch:=' i: =0 whi Ie ( i O then goto 1 if echo then if ch=chr( 13) or ch>=' then unitwrite(funit,ch,l) if ch=syscomt.eof then if fun i t=l then ch: =chr(O) FILE: TEXTIO. TEXT 0001 @7 MOVE.W #1,01 0000 FFFE @8 MOVE.L MOVE.B AOO.W BRA FWINOOW~AO,OO),A2 fWindowf[i]:=ch -2(AS), A2) #1,00 ®3 i: = i+1 FF74 0020 0001 0004 "'*** FGET3RO CMP.W BNE MOVE.B MOVE.W MOVE.L CMP.9 BNE.S MOVE.B MOVE.B BRA #1, FRECSZ( AO) FGET2L #0, FEOLN( AO ) #2, FSTATE(AO) FWINOOW(AO),A2 #$0, (A2) @1 #$20, (A2) #1, FEOLN( AO ) FGET2L 0010 @1 #$10, (A2 ) ®3 #2, FUNIT( AO ) @3 0001 0008 "'**'" 0004 0002 OOOS 0000 0002 OOOC CMP.B BNE.S CMP.W BLE.S noeof:=false if frecsize = 1 then feoln:=false fstate:=fgotchar if fwindowt[O]=chr(eol) then fwindowt[O]:=' feoln:=true if fwindowt[O]=chr(dIe) and funit > 2 then 28 S.p 82 TPR:MON11.TEXT Page 074 -----, 320CI 2FOB 320EI 6100 32121 206E 32161 2450 32181 1812 321AI 4884 321CI 0444 32201 SF"'''' 32221 OC44 32261 6E"'''' 32281 148C 322CI 3144 32301 6000 3226'" DC 3220'" 1I.2 32341 2F08 32361 6100 320A'" 2E 3202'" 36 323AI 206E 323EI 2450 32401 4A12 32421 6600 32461 4A68 324AI 67"'* 324CI 43E8 32501 OC69 32561 66** 32581 2F08 325AI 6100 325EI 6000 3256'" OA PAGE - 122 324A'" 16 32621 14BC 32661 6000 326AI 3062* 0208 326AI 2060 326EI 30BC 3268'" OOOA 3174'" OOFE 3118'" 015A 30FC* 0176 309A* 0108 32721 206E 32761 117C 327CI 117C 3260'" 0022 3244* 003E 3232'" 0050 31FC'" 0086 310C* OOA6 3070'" 0212 32821 4E5E 32841 205F 32861 4A9F 32881 4EOO 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 328AI 4E:SG 328EI 328EI 2060 32921 4250 32941 206E 32981 4A2B 329CI 6700 32AOI 4A68 32A41 6700 32A81 43E8 32ACI 3E28 32BOI 4246 32B21 3028 PAGE - 123 32B61 32B81 32BCI 32BEI FE3E 0008 0020 007F 0020 001A "'''''''''' (1)2 FE16 OOOB ®3 "'''''''''' 0038 DOlE 0003 0004 F08C **** ,'MONITOR 0008 0001 0005 0001 0004 AO, -( A7) FGET 8(A6),AO FWINOOW(AO),A2 (A2 ),04 04 #$20,04 ®2 #127,04 @2 #$20, (A2 ) 04, FREPCNT( AD) FGET2L MOVE.L BSR AO, -(A7) FGET MOVE.L MOVE.L TST.B BNE TST.W BEQ.S LEA CMP.W BNE.S MOVE.L BSR BRA 8(A6), AO FWINOOW(AO),A2 (A2 ) FGET2L FSOFTBF( AD) ®4 FHEAOER(AO),Al #TEXTFILE,FKINO(A1) (il4 AD, -(A7) SCANAHO FGET2L fset(f) amount:=ord(fwindowt[OJ)-32 if amount 0 and > amount <= 127 then fWindowt[O]: =' frepcnt:=amount fset(r) if fwindowt[O]=chr(O) then if fsoftbuf and fheader.dfkind=textfile then scanahead( f) else FILE: TEXTI O. TEXT <14 0020 **"'''' FFFC 0000 MOVE.L BSR MOVE.L MOVE.L MOVE.B EXT.W SUB.W BLE.S CMP.W BGT.S MOVE.B MOVE.W BRA MOVE. 8 #$20, (A2) BRA FGETlL FGETNOP GETSYSC AD # FGETlL FGET2L fWindowt[O]: =' else MOVE.L MOVE.W -4( AS), AO #1 NOTOPN, (AO) syscomt. iors It: MOVE.L MOVE.B MOVE.B 8(A6),AO #1, FEOF(AO) #1, FEOLN( AD) feof:=true feoln:=true UNLK MOVE.L TST.L JMP A6 =inotopen (7 A7 f'AO + AO ;.. PROCE~URE FPUT(FILE:FIB) stack 8 4 0 File Address Return Address Old A6 registers 04 05 06 07 , 0000 FFFC 0008 OOOA "'''''''''' 0038 "'''''''''' OOlE 0008 0018 MONITOR 0051 B069 0002 66"'''' 3028 003C FPUT LINK GETSVSC # MOVE.L MOVE.W MOVE.L TST.B BEQ TST.W BEQ LEA MOVE.W MOVE.W @1 MOVE.W FILE: TEXTIO. TEXT ADD.W CMP.W BNE.S MOVE.W amount left inbuf wininx leftoput A6,#0 AO -4( AS ), AO # I NOERR, (AO ) 8(AG),AO FI SOP EN ( AO ) FPUTNOP FSOFTBF( AO) (il13 FHEAOER(AO),A1 FRECSZ(AO),D7 #0,06 FNXTBLK(AO),DO FSTBLK(Al),OO LSTBLK(Al),DO ®3 FNXTBVT(AO),DO syscomt. iors It: = inoerror with f do if f isopen if fsoftbuf then with fheader do leftoput:=frecsz wininx:=O repeat if dfirstblk+fnxtblk=dlastblk then 28 Sap 82 32C21 32C41 D047 13069 32C81 SF** 48E7 42A7 2F08 6100 301F 4COF 67** 320EI 320EI 2060 32E21 30BC 32E61 6000 32EAI 32EAI 32EAI 32C8* 20 32EAI 3A29 32EEI 60** 320C* 12 32BC* 32 32FOI 3A3C 32EE* 04 32F41 9AG8 32F81 3807 32FAI 8845 32FCI SF** 32FEI 3805 32FC* 02 33001 4A44 33021 SF** 33041 317C 330AI 47E8 330EI 06E8 33121 2450 33141 04C6 33161 3004 33181 160A 331AI 5340 331CI 66FA 331EI 0968 33221 OC44 33241 9E44 3302* 22 33261 4A47 3328, 6700 332CI 4A68 33301 67** 33321 4268 33361 317C PAGE - 124 32CAI 32CEI 32001 32021 32061 32081 320CI 333CI 33401 33441 33461 334AI 334AI 334EI 3330* 33521 33561 335AI 335CI 33601 33641 3368, 336AI 336EI 33701 33741 33781 335A* 337AI 337EI 33821 33841 33861 3378* 33881 338CI 33901 332A'" 33941 339AI 339CI 339EI 33A21 33A41 33AAI 33AEI 33B2, 33B41 33B81 TPR:MONll.TEXT 0016 7FCO F96C 03FE # FFFC 0008 **** AOO.W CMP.W BlE.S MOVEM.L MOVE.l MOVE.L BSR MOVE.W MOVEM.l BEQ.S GETSYSC MOVE.L MOVE.W BRA 07,00 lSTBYTE(A1),00 (112 01-07/AO"':A1, -(A7) #0,-~A7~ AO,- A7 CANTSTR ~ A7 )+, DO A7 )+, 01-07 lAO-A1 ®3 AO -4( A5 ), AO #INOROOM, (AO) FPUTll 0016 (112 MOVE.W BRA.S lSTBYTE(A1),05 ®4 0200 ®3 MOVE.W #FBlKSIZ,05 003C (114 SUB.W MOVE.W CMP.W BlE.S MOVE.W FNXTBYT(AO),05 07,04 05,04 TST.W BlE.S MOVE.W lEA AOO.W MOVE.l AOO.W MOVE.W MOVE.B SUB.W BNE.S AOO.W AOO.W SUB.W 04 ®7 ~5 0001 003E 0050 003C (IIG 003C (117 **** 003E 003E 0001 001C MONITOR TST.W BEQ TST.W BEQ.S MOVE.W MOVE.W FILE: TEXTI O. TEXT #', FBFCHNG)'O) FBUFFER!AO ,A3 FNXTBYT AO ,A3 FWINOOW AO ,A2 OG,A2 04,00 (A2 )+, (A3)+ #1,00 til 6 04, FNXTBYT( AO ) 04,06 04,07 07 (1114 FBFCHNG( AO ) @8 #0, FBFCHNG ~ AO ~ #l,FMOOIFO AO MOVEM.l BSR SUB.W BSR 4CDF 6600 20 3028 B068 6C** 48E7 6100 3C3C 3FOO 6100 4E90 4COF 6600 60"'''' 1E 45E8 303C 421A 5340 66FA OE 5268 4268 6000 006A OC68 66*'" 2450 OC12 66** OC69 3028 OC40 6D"'''' 3028 0800 MOVEM.l (A7)+,04-07/AO-A1 BNE FPUTll ®8 0018 0016 0003 0004 003C 0181 0018 0000 else leftinbuf:=fblksize-fnxtbyte amount:=leftoput if amount>leftinbuf then 04-07/AO-A1,-(A7) lOPARMS #1,03 WRITEIT FNXTBlK~AO~,OO amount:=leftinbuf if amount > 0 then fbufchngd:=true dst:=fbuffer[fnxtbyte] src:=fwindowf[wininx] moveleft(src,dst,amount) fnxtbyte:=fnxtbyte+amount win1nx:=wininx+amount leftoput:=leftoput-amount dona:=leftoput = 0 if not done then if fbufchngd then fbufchngd:=false fmodified:=true unitwrite(funit,fbuffer, fblksize,dfirstblk+fnxtblk-l) if iorslt<>O then goto 1 ®11 ADO.W MOVE.W BRA #1, FNXTBlK~AO ~ #O,FNXTBYT AO @1 fnxtblk:=fnxtblk+1 fnxtbyte:=O until done {loop exit near (7) @14 CMP.W BNE.S MOVE.l CMP.B BNE.S CMP.W MOVE.W CMP.W BlT.S MOVE.W BTST #1, FRECSZ( AO ) @12 FWINOOW)AO),A2 #$0,(A2 ®12 #TEXTFIlE,FKIND(A1) FNXTBYT(AO),OO #FBLKSIZ-127,DO ®12 FNXTBlK(AO),OO #0,00 if frecsize=l then ®10 0000 leftinbuf:= dlastbyte-fnxtbyte FBUFFER(AO),A2 #FBlKSIZ,DO (A2 )+ #1,00 ®10 ®9 oooa else laftinbuf:= fblksize-fnxtbyt e elsa lEA MOVE.W ClR.B SUB.W BNE.S 03FO **** 0001 iors It: = inoroom; goto 1 FMAXBlK AD ,DO ®9 D4-07/AO-A1,-(A7) lDPARMS #INBIT,D6 ~O, -( A7) GETUNIT ~AO ) A7 )+, 04-07/AO-A1 FPUTll E5FO 0018 003C FF20 if cantstretch(f) then MOVE.W CMP.W BGE.S MOVEM.l BSR MOVE.W MOVE.W BSR JSR MOVEM.L BNE BRA.S OFCO "''''*''' 0001 0050 0200 if fnxbyte+leftoput > dlastbyte then (liS 05,04 48E7 OFCO 6100 **** 5343 6100 F3E4 03FO **** Page 075 @11 if fnxtblk O then goto 1 else fillchar(fbuffer,fblksize,O) if fWindowT[OJ=chr(eol) then if dfkind=textfile then if fnxtbyte>=fblksize-127 and not odd(fnxtblk) then 28 Sap 82 33BCI 66** 33BE( 317C 33C4( 4212 33CS( 2F08 33C8( 6100 33BC* OE 33B2* 18 33A2* 28 339A* 30 33CC( 6000 32AS* 012A 3300( 48E7 3304( 3028 PAGE - 125 3308( 2210 330A( 7401 330C( 4243 330E( 6100 33E21 4COF 33ES( 6600 33EAI 6000 33EE( 329E* 0150 33EE( 2B48 33F2( 30BC 33E8* OOOE 3376* 0080 3350* 00A6 32E8* 010E 33F9( 206E 33F:'A( 117C 3400( 117C 33EC* 001A 33CE* 0038 34061 6000 340A( 340A( 340A( 3362* 00A8 3342* 00C8 340AI 3028 340E( 4868 34121 221F 3414( 243C 341A( 3611 341CI 0668 34201 4E75 34221 3422( 34221 3422( 3422( 3422( 3422( 3422( 3422( 3422( 3422( 4E56 3426( 34261 2060 342A( 4250 342CI 206E 3430( 4A28 3434( 66** 34361 3436( 2060 343AI 30BC 343EI 6000 3434'" OC PAGE - 126 3442( 344S( 344A( 344E( 3452( 345S( 345C( 345E( 3464( 345C'" 34681 346CI 34701 34721 34741 3476( 34781 347AI 347EI 3478* 3480, 3484, 43E8 302E 6BOO 4AS8 6700 OC29 6'6** 0(S8 6700 OA C1E8 81FC 3200 5241 4840 4A40 66** 303C 5341 06 3429 9451 TPR: MONll. TEXT 01FF 003C FECO *"''''''' !il12 OFCO OOOC MONITOR (i13 1112 #FBLKSIZ-1,FNXTBYT(AO) #0, (A2) AD, -(A7) FPUT BRA FPUT2L fnxtbyte:=fblksize-1 fWindowt[O]:=chr(O) fput( f) else MOVEM.L 04-07/AO-A1,-(A7) MOVE.W FUNIT(AO), DO FILE: TEXTI O. TEXT MOVE.L MOVE.L MOVE.W BSR MOVEM.L BNE BRA FPUTNOP PUTSYSC F34C 03FO **"'* "''''*''' FFFC 0000 BNE.S MOVE.W MOVE.B MOVE.L BSR Page 076 # 0008 0001 0005 0001 0004 FPUTlL FE7A FPUT2L FWINOOW(AO),Ol #1,02 #0,03 WRITE IT (A7)+,04-07/AO-A1 FPUTlL FPUT2L AO l unitwrite(funit,fwtndowt,l) if iorslt<>O then goto 1 elsa MOVE.L MOVE.W AO,-4( A5 #INOTOPN, AO) syscomt. iorslt: =inotopen MOVE.L MOVE.B MOVE.B 8(A6),AO #1, FEOF(AO) #1, FEOLN(AO) feof:=true feoln:=true BRA FGET2L LOP ARMS -- Load fun it, fbuffer, fblocksize and dfirstblk+fnxtblk OOOC 0050 LOP ARMS MOVE.W PEA MOVE.L MOVE.L MOVE.W AOO.W RTS 0000 0200 0018 FUNIT(AO), DO FBUFFER ( AO ) (A7 )+, 01 #FBLKSIZ,02 FSTBLK(A1),03 FNXTBLK(AO),03 PROCE~URE FSEEK(VAR F: FIB; RECNUM: INTEGER) stack 10 8 4 0 0000 FFFC SEEK # OOOA 000 A FFFC 0000 "'*"'* MONITOR DOlE 0008 "'*** 0038 "''''** 0003 0004 # !ill !il2 0200 0002 A6,#0 AO -4( AS), AO #1 NOERR, (AO ) 10(A6),AO FISOPEN(AO) !ill AO -4(A5),AO #I NOTOPN, (AO ) FSEEK1 syscomt. iorslt: =inoerror with F do if not fisopen then syscomt. lorslt: =inotopen else FILE: TEXTIO. TEXT 0001 0008 "'''''''* 0008 0200 LINK GETSYSC MOVE.L MOVE.W MOVE.L TST.B BNE.S GETSYSC MOVE.L MOVE.W BRA File Address Record Number Return Address Old A6 !il3 LEA MOVE.W BMI TST.W BEQ CMP.B BNE.S CMP.W BEQ FHEAOER(AO),A1 8(AS), DO FSEEK1 FSOFTBF ( AO ) FSEEK1 #TEXTFILE,FKINO(A1) !il2 #1, FRECSZ( AO ) FSEEK1 MULS OIVS MOVE.W AOO.W SWAP TST.W BNE.S MOVE.W SUB.W FRECSZ(AO),OO #FBLKSIZ,OO 00,01 #1,01 DO DO !il3 #FBLKSIZ,OO #1,01 01 is now block DO is now byte MOVE.W SUB.W LSTBLK~A1~,02 n:=dlastblk-dfirstblk FSTBLK A1 ,02 with fheader do if (recnum < 0) or (not fsoftbuf) or «fkind=textfile) and (frecsize=l» goto 1 then block:=recnum"'frecsize div fblksiz+1 byte:=recnum*frecsize mod fblksiz if byte = 0 then byte:=fblksize block:=block-1 28 Sap 82 34861 B242 34881 6E** 348AI 66** 348CI 3629 34901 B043 3492, 60** 3488* OA 3494, 3202 34961 3003 3492* 04 348A* OC 34981 B268 349CI 67** 349EI 4A68 34A21 67** 34A41 4268 34A81 317C 34AEI 48E7 34B21 6100 34B61 5343 34B81 6100 34BCI 34BCI 4CDF 34COI 6600 34C41 34A2* 20 34C41 B268 34C81 6E** 34CAI OC40 34CEI 67** 34001 48E7 34041 6100 34081 3C3C PAGE - 127 34DCI 3F'OO 340EI 6100 34E21 4E90 34E41 4COF 34E81 6600 34CE* le 34C8* 22 349C* 4E 34ECI 3628 34FOI B668 34F41 SF'** 34F61 3143 34FAI 3168 35001 60** 34F4* DC 35021 66** 35041 3628 35081 BG68 350CI 6F** 350EI 3143 350C* 04 3502* Ol~ 3500* 10 3512/ 4228 3516/ 4228 351AI 4268 351EI 4A68 3522, 67"'* 35241 317C 3522* 06 352AI 3141 352EI 3140 34EA* 0048 34C2* 0070 3466* OOCC 3454* OODE 344C* 00E6 3440* 00F2 35321 4E5E 3534, 205F 35361 SC4F 35381 4EDO 353AI 353AI 353AI 353AI 353AI 353AI 353AI 353AI 353AI 353AI 353AI 353AI 353AI PAGE - 128 353AI 353AI TPR: MON11. TEXT CMP.W BGT.S BNE.S MOVE.W CMP.W BLT.S 02,01 @4 (Il5 LSTBYTE(Al),D3 03,00 (Il5 !!l4 MOVE.W MOVE.W 02,01 03,00 t!l5 F272 CMP.W BEQ.S TST.W BEQ.S MOVE.W MOVE.W MOVEM.L BSR SUB.W BSR FNXTBLK(AO),D1 @9 FBFCHNG( AO ) ®8 #O'FBFCHNG~AO) #l,FMODIFD AO DO-D7/AO-A1,- A7) LDPARMS #1,03 WRITEIT 03FF "'''''''''' MOVEM.L (A7)+,DO-D7/AO-A1 BNE FSEEKl 0016 0018 003E 003E 0001 001C FFCO FF56 0016 0200 FFCO FF34 0001 MONITOR @8 CMP.W BGT.S CMP.W BEQ.S MOVEM.L BSR MOVE.W FILE: TEXTIO.TEXT MOVE.W DO, -( A7) BSR GETUNIT JSR MOVEM.L BNE FSEEK1 E47C ~~~~+,DO-D7/AO-A1 03FF *"''''''' 0018 0016 FMAXBLK(AO),D1 !!l9 #FBLKSIZ,DO ®9 DO-07/AO-A1,-(A7) LOP ARMS #INBIT,D6 119 0016 003C 003A !!l10 MOVE.W CMP.W BLE.S MOVE.W MOVE.W BRA.S Page 077 if (block> n) or «block = n) or (byte >= dlastbyte» block := n byte := dlastbyte if block <> fnxtblk then if fbufchngd then fbufchngd:=false fmod if ied: =true unitwrite(funit,fbuffer, fblksize,dfirstblk+fnxtblk-1) if iorslt<>O then goto 1 if (block <= fmaxblk) and (byte <> fblksize) then unitread(funit,fbuffer, fblksize,dfirstblk+fnxtblk) if iorslt<>O then goto 1 FNXTBLK~AO~,D3 if fnxtblk>fmaxblk then (!Ill fmaxblk := fnxtblk fmaxbyte := fnxtbyte else FMAXBLK AO ,03 @10 03, FMAXBLK~AO) FNXTBYT(AO ,FMAXBYT(AO) BNE.S MOVE.W CMP.W BLE.S MOVE.W FMAXBYT AO ,03 ®11 D3,FMAXBYT(AO) #0, FEOF( AO ) #0, FEOLN( AO ) #0, FREPCNT( AO ) FSTATE(AO) ®12 #1, FSTATE(AO) feof : = fa lse feoln := false frepcnt : = 0 if fstate <> fjandw then 0001 0006 MOVE.B MOVE.B MOVE.W TST.W BEQ.S MOVE.W 0018 003C MOVE.W MOVE.W 01, FNXTBLK~AO ~ DO,FNXTBYT AO fnxtblk : = block fnxtbyte := b!:lte UNLK MOVE.L ADD.W JMP A6 (A7)+,AO #6,A7 (AO) 003C 003A 003A 0005 0004 001A 0006 FSEEK1 ®11 FNXTBYT~AO~,D3 if (fnxtblk = fmaxblk) and (fnxtbyte > fmaxbyte) then fmaxbyte := fnxtbyte fstate:=fneedchar . INCLUDE MONLOAD.TEXT Filename monload $$LOADIT - Memory reSident segment loader MONITOR . Upon entry: FILE: MONLOAD.TEXT then ST.L - procedure-to-be-called's return address ST.L - extra JSR's return address ST.L - pointer to ZFIRST D7.W - parameter to main program 28 Sep 82 353AI 353AI 353AI 353AI 353AI 353AI 353AI 353AI 353AI 353AI 43FA 353EI 245F 35401 2FOO 35421 6100 35461 35461 41EO 354AI 48EO 354EI 354EI 4A20 35521 67** 35541 35541 2B4A 35581 60*'" 355AI 3552* 06 355AI 2B4A 3558* 04 355EI 2A5F 35601 204A 35621 90FC 35661 2089 35681 35681 35681 35681 35681 35681 201F 356AI 224A 356CI 5949 356EI 2251 35701 3219 35721 B091 35741 SF** 35761 0,2FC 357AI 5341 357CI 6AF4 357EI 4280 35801 6000 3574* OE 35841 9:2FC 35881 35881 35881 35881 PAGE - 129 35881 35881 35881 35881 35881 358CI 35901 35941 35981 3598, 35981 35981 35981 35981 35981 35981 35981 35981 35981 359CI 35AOI 35A21 35A61 35A81 35ACI 35AEI 35BO, 35AC* 35B41 35881 35BAI 35BE, 35BEI 35BEI 35BE, 35BEI 35BEI 35BEI 35BE, 35BEI TPR: MONll. TEXT ZZLOAOIT: Store the address of REMOVE1 into SFIRST-20 so that global GOTO can unload segments as needed. "'*"'''' ***'" FF7C 0F'18 # FFA8 # FF90 # FFFO # iii! LEA MOVE.L MOVE.L BSR AOORSAT LEA MOVEM.L RUNUTST TST.B BEQ.S PUTUFST MOVE.L BRA.S PUTZFST MOVE.L SFIRST-20 0010 **** 0014 **** MOVE.L PEA TST.L BNE (SP)+,16(A1) ZZUNLOAO 20(Al ) PATCHIT + 6 Save the old return address. Replace it with $$UNLOAO. Is this segment already in memory? Yes. Oon't need to load it. No. Need to load it. The reqUired segment is not in memory. It must be read from disk. But first find where it will go. Segment Table Extra call location + 6 (Al ) (~O) 48E7 2078 2808 91E9 5988 BlFS 6E** 7001 6000 06 21C8 20C4 2348 8140 010C 0008 0108 **** 010C OOOC MOVEM.L MOVE.L MOVE.L SUBA.L SUBQ.L CMPA.L BGT.S MOVE.L BRA IT. FITS: MOVE. L MOVE.L MOVE.L 001D7/A1, -(SP) S10C,AO AO,04 8( Al ), AO #4,AO Sl08,AO IT. FITS #1,00 ERROR Save the necessary registers. Fetch upper memory limit. Save a copy. Subtract size of segments code. Leave room for pointer. Will it fit? Yes. No. Error time. AO,S10C 04,(AO)+ AD, 12( A1 ) Update current top of memory. Push pointer to old top of memory. Store segment address in segment table. Now read the stuff into memory from disk. (AD) (A1) = Where it will go. = This segment table. Register useage: Page 078 28 Sep 82 35BEI 35BEI 35BEI 35BEI 35BEI 35BEI 35BEI 35BEI 35BEI 35BEI 35BEI 35BEI 35BEI 35COI 35C21 PAGE TPR: MON11. TEXT 00 - 02 03 04 05 06 07 AO - A1 A2 A3 A4 2809 284A 98FC 0010 - 130 MONITOR 35C61 2854 35C81 2A29 35CCI 2E05 35CEI 0285 35041 E08F 35061 E28F 35081 6100 350CI 350CI 350CI 350CI 350CI 350CI 350CI 350CI 350CI 350CI 350CI 6100 35EOI 3600 35E21 6100 35E61 0443 35EAI 60*'" 35ECI OC43 35FOI 6E"'* 35F21 E34B 35F41 41FA 35F81 3630 35FCI 4EFO 36001 35FO'" DE 35EA* 14 36001 7002 36021 6000 36061 35F6'" 0010 36061 "'''''''''' 36081 "'''''''''' 360AI *"''''''' 360CI "'''''''''' 360EI "'''''''''' 36101 "'''''''''' 36121 "'''''''''' 36141 3606'" OOOE 36141 360A'" 000£ 36141 360C* ODOE 36141 360E* OOOE 36141 36141 36141 5980 36161 OA80 36181 BC85 PAGE - 131 361AI 6ECD 361CI 2C05 361~ 0285 36241 E08E 36261 E28E 36281 OE86 362AI 6100 362EI 60AC 36301 36301 36301 36301 36301 3610* 002A 36301 36301 2600 36321 5183 36341 2644 36361 266B 363AI 6100 Scratch. Locs 1. Must be preserved by serv ice rout ines. Address of segment table. Next byte to read. (INBYTE) Number of va I id bytes in buffer. (MAXBYTES) First b lock in buffer. (INBLOCK) Scratch. Ptr to ZFIRST Local. Must be preserved by service routines. Pointer to buffer. MOVE.L MOVE.L SUB.W FILE: MONLOAO.TEXT MOVE.L MOVE.L MOVE.L ANOI. L LSR.L LSR.L BSR 0004 0000 OlFF "'''''''''' A1,04 A2,A4 #16,A4 Save address of segment table in 04. (A4), A4 4( A1 ),05 05,07 #$lFF,05 #8,07 #1,07 FILLBUF (A4) = buffer Compute compute ZFIRST-16 in A4 starting byte, and starting block. Go fetch the first buffer fu 11. This is the main fetch loop. Blocks are fetched one at a time and selected blocks are processed. Only code blocks (85), relocation blocks (86), and end blocks (81) are examined. The rest are skipped. MAINLOOP: NEXT. 1 00,03 NEXT. 3 #$80,03 BAOBLCK #6,03 BAOBLCK #1,03 C.TABLE,AO 0(AO,03.W),03 0(AO,03.W) DO := next byte. Save it in 03. DO := next 3 bytes. Is block kind < 80? Yes. Issue error. No. Is it > 86? Yes. Issue error. No. 00 a CASE BAOBLCK: MOVE. L BRA #2,00 ERROR Bad Block. Issue error #2. C.TABLE:.WORO . WORD · WORD · WORD . WORD · WORD · WORD BLOCK80-C.TABLE BLOCK81-C.TABLE BLOCK82-C.TABLE BLOCK83-C.TABLE BLOCK84-C.TABLE BLOCK8S-C.TABLE BLOCK86-C.TABLE BSR MOVE.W BSR SUBr. W BLT.S CMP.W BGT.S LSL.W LEA MOVE.W JMP "'''''''''' "'''''''''' 0080 0006 "''''*''' 3000 3000 "'''''''''' BLOCK80: Module Name Block BLOCK82: Entry Point Block BLOCK83: External Reference Block BLOCK84: MONITOR Starting Address Block SUBQ.L AOO.L CMP.L FILE: MONLOAO.TEXT BGT.S MOVE.L ANOI. L LSR.L LSR.L AOO.L BSR BRA.S 0000 01FF "'*"'''' #4,00 00,05 05,06 Skip blocksize - 4 bytes. MAINLOOP 05,06 #$lFF,05 #8,06 #1,06 06,07 FILLBUF MAINLOOP Yes. Go process next block. No. Compute which byte, and Is the next byte in the buffer? wh ich block its In. Go fill the buffer. Go do next block. 85 - Code block. BLOCK85: OOOC **"'''' MOVE.L SUBQ.L MOVE.L MOVE.L BSR 00,03 #8,03 04,A3 12( A3 ), A3 NEXT. 4 Save block size in 03. 03 = bytes of code (BYTESLEFT). (A3) = Segment Table. A3 = base address of segment. Fetch relative address for code. TPR:MON11.TEXT 28 Sep 82 363EI 07CO 36401 4A83 36421 SF"'''' 36441 2406 36461 9485 36481 8682 364AI 6F"'''' 364CI 9682 364EI 41F4 5800 36521 E28A 36541 3608 36561 5382 36581 6EFA 365AI E08E 365CI E28E 365EI oE86 36601 4285 36621 6100 36661 6008 "'''''''''' 364A* 1C 36681 41F4 5800 366CI OA83 366EI E28B 36701 3608 36721 5383 36741 6EFA 3642'" 32 36761 6000 FF64 367AI 367AI 367AI 367AI 367AI 367AI 367AI 3612* 0074 PAGE - 132 MONITOR 367AI 367AI 367CI 367EI 36801 36821 36861 368AI 368CI 36901 36921 36941 36981 36981 36981 36981 36981 36981 36981 3608* 36981 36981 36981 369CI 369CI 369CI 369C1 369CI 369CI 369C, 369CI 369CI l6BOl 36821 36841 36861 36881 l6BAI l6BC1 36(01 l6C21 36C21 DO,A3 03 ENOWH85 06,02 05,02 02,03 ALL. 85 02,03 0(A4,05.L),AO #1,02 (AO )+, (A3)+ #1,02 LO.85 #8,06 #1,06 06,07 05 FILLBUF WHILE85 ALL. 85: LEA AOO.L LSR.L Ll.85: MOVE.W SUBQ.L BGT.S 0(A4,05.L),AO 03,05 #1,03 (AO )+, (A3)+ #1,03 Ll. 85 ENoWH85:BRA MAINLOOP Relocate it to actual address. While BYTESLEFT > 0 DO BYTESINBUFFER := MAXBYTES - INBYTEj IF BYTESINBUFFER < BYTESLEFT THEN BYTESLEFT -:= BYTESINBUFFER Move BYTESINBUFFERI2 words from buffer to f ina I locat ion. See how man~ blocks were in buffer and add to INBLOCK. INBYTE : = 0; Fill the buffer. ELSE Update INBYTE. Move BYTESLEFT/2 words from buffer to final loct ion. Go do ne)(t block. 86 - Relocation Block. Must come after the code that it re locates. FILE: MONLOAo.TEXT BLOCK86: 2600 5983 E48B 2644 266B OOOC 6100 """*'" 220B o3B3 0800 5383 6F.F2 6000 FF 46 MOVE.L SUBQ.L LSR.L MOVE.L MOVE.L TOP. 86: BSR MOVE.L AOO.L SUBQ.L BGT.S BRA 00,03 #4,03 #2,03 o4,AJ 12( A3 ), A3 NEXT. 4 AJ,ol 01, 0(A3, DO. L) #1,03 TOP. 86 MAINLOOP NRELOCS := (BLOCKSIZE - 4) OIV 4; Get base address of th is segment. Get ne)(t address to relocate. Put base into a 0 register. Relocate proper place. More to relocate? Yes. No. Go do ne)(t block. 81 - End Block. Fnished. 0092 BLOCK81: MOVEM.L (SP)+,00ID7/A1 4COF 0281 This segment is in memory. into JMP's. (A1) (~O) 3596* 0106 369CI ]6AOI 360\21 36A6, 36AAI l6ACI AooA.L WHILE85:TST.L BLE.S MOVE.L SUB.L CMP.L BLE.S SUB.L LEA LSR.L LO.85: MOVE.W SUBQ.L BGT.S LSR.L LSR.L AoO.L CLR.L BSR BRA.S Page 080 52A9 2051 2669 2229 2418 30FC 0481 20C2 87C8 6EF2 204A 5148 2350 2089 0014 0020 OOOC 4EF9 0018 ; Restore registers. Change the JSR's in the descriptors = Segment Table = E)(tra call location PATCHIT:AOOQ.L MOVE.L MOVE.L MOVE.L P.LOOP: MOVE.L MOVE.W AOO.L MOVE.L CMPA.L BGT.S MOVE.L SUB.W MOVE.L MOVE.L #1,20(A1) (A1), AO 32(A1),AJ 12( A1 ),01 (AO )+,02 #$4EF9,(AO)+ 01,02 02, (AO)+ AO,AJ P.LOOP A2,AO #8,AO (AO ), 24( A1 ) A1, (AO) + 6 Bump segment reference counter. (AO) first descriptor. (A3) 1st descriptor in ne)(t segment. 01 = first b~te of segment In memor~. 02 = segment relative address of procedure. Patch in JMP )(xx.L opcode. Compute loaded address and drop it into JMP instrcution. Any more descriptors to patch? Yes. Go do 'em. No. Link this segment ... compute ZFIRST-8 in AO . .. into act ive '" '" segment list. = Now crawl down the table of soft break pOints ]6(2, J6C21 36C21 36(21 l6C21 PAGE - 133 Each entr~ , MONITOR FILE: MONLOAO.TEXT contains: segmment number offset in segment instruction save cell 2 b~tes 2 bytes 2 bytes 28 Sep 82 36C21 36C21 36C21 36C21 36C21 36C41 36C61 36C81 36CAI 36CCI 36001 36041 36041 36061 36081 3S0AI 360CI 3S0EI 360A* 3SEOI 36E21 TPR:MONll.TEXT (AI) = Segment Tabla (~O) = Extra call location + S 2449 95CC 220A EA81 5281 2669 OOOC 2478 012C 341A 68*'" B242 S7** 4A9A SOf"4 04 341A 34f"3 2000 3SE~ 37BC 4E4C 2000 36ECI 60E6 3SEEI 3SEEI 3SEEI 3SEEI 36EEI 36EEI 3606* 16 3SEEI 2:240 36f"01 2F"00 36f"21 6100 **** 3Sf"SI 3Sf"61 41EO f"f"S4 36f"AI 4C08 18f"0 36f"EI 36f"EI 4A20 f"f"A9 37021 67** 37041 37041 4220 f"f"A9 37081 2A5f" 370AI 2F"29 f"f"f"C 370EI SOOO **** 3702* OE 37121 2A5f" 37141 4EE9 f"f"f"A 37181 37181 37181 37181 37181 37181 37181 37181 PAGE - 134 MONITOR 37181 37181 37181 37181 37181 3SS4* 3S2C* 350A* 37181 37181 371CI 37201 37221 37221 37261 37281 37281 372CI 372EI 3726* 372EI 372C* 37321 37341 373S1 373AI 373CI 37401 37441 374S1 37481 374CI 374EI 37501 37521 37541 3750* 37581 Pege 081 MOVE.L SUB.L MOVE.L ASR.L AOO.L MOVE.L MOVE.L Al,A2 A4,A2 A2,01 #5,01 #1,01 12(A1),A3 S12C,A2 ; Compute segment number (AI-A4)/32+1 Get actual address of segment in memory Get start of break point table PATCHBP MOVE.W BMI.S CMP.W BEQ.S TST.L BRA.S (A2)+,02 G02USER 02,01 SAMESEG (A2 )+ PATCHBP SAMESEG.MOVE.W MOVE.W MOVE.W BRA.S (A2)+,o2 0(A3, 02), (A2)+ #S4E4C, O(A3, 02) PATCHBP End of table? Same segment ? No, then skip seg offset and save cell Yes, get offset in segment Save the instruction Store TRAP #$C into code Go do next entry Jump to user code (~O) = Extra call location + S G02USER MOVE.L MOVE.L BSR AooRSAB # LEA MOVEM.L OBUGTST # TST.B BEQ.S OBUGCLR MOVE.B MOVE.L MOVE.L BRA " MOVE.L JMP ill I oO,AI Get extra return address. A5,-(A7) Save users AS SETUPAS AD ,..156(AS),AO (AO)+,A3-A4ID4-07 Chack debug flag -87( AS) ill I Clear debug flag (so we don't stop again) #0, -87( AS) (A7)+,AS Restore users AS Push return address -4(AI),-(A7) f"AKEREO Go fake red button (A7)+,AS -S( AI) Restore users AS Go to user ! f"illBuf - f"ill the buffer. This routine reads as much as possible into the code buffer from an already open UCSO file. , Parameters: 07.L A4.L Next block to read POinter to buffer f"ILE: MONLOAO.TEXT Returns: 06.L = Number of bytes read All other registers are preserved. 00B4 OOEC 013E f"ILLBUF: 48E7 f"Of"E SlOO **** 42A7 4A20 f"FA8 S7** # 2060 f"f"A4 60** # @1 MOVEM.L BSR CLR.L RUNUTST TST.B BEQ.S GETUf"IB MOVE.L BRA.S GETCFIB 00-OSID7/AO-AS,-(SP) SETUPA5 -( SP) -88(AS) ®1 AO -92(A5),AO @2 AO Room for function result Running user? Yes, Get userfib ptr No, Get codefib ptr 06 2060 f"FOC # MOVE.L -3S(AS),AO 04 2F08 2FOC 3F3C 3F07 3F3C 6100 4286 3Clf" 4COf" E18E E38E 6E** 7003 SO 00 06 4E75 0004 0001 F6CE 7f"Bf" *"'** MOVE.L MOVE.L MOVE.W MOVE.W MOVE.W BSR CLR.L MOVE.W MOVEM.L lSL. L lSL. L BGT.S MOVE.l BRA READ. OK: RTS AO, -(A7) f" i Ie address A4,-(SP) Buffer address #INBUf"SZIFBlKSIZ,-(SP) # Blocks to read 07, - (SP) Block to read #1, -( SP) Read:=true BlKIO 06 ; f"etch (A7)+,OS ; #blocks read. (SP)+,OO-OSID7/AO-AS OS = number of #8,OS #I,OS bytes read. READ. OK Was read ok? #3,00 No. Error #3. ERROR 28 Sep 82 375AI 375AI 375AI 375AI 375AI 375AI 375AI 375AI 375AI 375AI 375AI 375AI 375AI 375AI 375CI 375EI 37601 PAGE TPR:MONll.TEXT NextBuf - Fetch the next sequential buffer full. Sets 06 07 05 Number of bytes in buffer, and Current first b lock in buffer. Next byte to read to zero. All other registers are preserved. NEXTBUF: 4285 ED8E E28E oE86 - 135 MONITOR 37621 61B4 37641 4E75 37661 37661 37661 37661 37661 37661 37661 37661 37661 350E'" 0188 37661 37661 BC85 37681 6E"'''' 376AI 6lEE 3768'" 02 376CI 4280 376EI 1034 5800 37721 5285 37741 4E75 37761 37761 37761 37761 37761 37761 37761 35E4'" 0192 37761 37761 61EE 37781 2200 377AI Et89 377CI 6lE8 377EI 8280 37801 Et89 37821 61E2 37841 8081 37861 4E75 37881 37881 37881 37881 37881 37881 37881 3688'" 0100 363C'" 014C 37881 37881 61EC 378AI 2200 378CI E189 378EI 6106 37901 8081 37921 4E75 PAGE - 136 MONITOR 37941 37941 37941 37941 37941 37941 37941 37941 37941 37941 37941 358E'" 0206 37941 37941 37941 6100 "'''''''''' 37981 4EoO 379AI 379AI CLR.L LSR.L LSR.L Aoo.L tILE: MONLOAo.TEXT BSR RTS 05 #8,06 #1,06 06,07 INBYTE := 0 Se. how many blocks are in this buffer. Add it to INBLOCK. tILLBUF Go fill the buffer. Next_1 - Read the next byte of code. oO.L = the byte read Returns: Preserves all registers. NExt. 1: OK.1: CMP.L .BGT.S BSR 05,06 OK. 1 NEXTBUF Next byte in buffer? Yes. No. Read some more from disk. CLR.L MOVE.B AooQ.L RTS DO O(A4, 05. L), DO #1,05 Fetch the next byte from the buffer. Update INBYTE. Next_3 - Read the next byte of code. Returns: oO.L = the value read NEXT. 3: BSR MOVE.L LSL. L BSR OR.L LSL.L BSR OR.L RTS NEXT. 1 00,01 #8,01 NEXT. 1 00,01 #8,01 NEXT. 1 01,00 - Read the next byte of code. Next~4 Returns: OO.L = the value read NEXT. 4: BSR MOVE.L LSL. L BSR OR.L RTS tILE: MONLOAO.TEXT NEXT. 3 00,01 #8,01 NEXT. 1 01,00 $$UNLOAD - Remove a segment from memory. ThiS routine is returned to when the first (and only remaining) call to a procedure in a particular segment returns. If that segment has not been loaded by a specific Load Segment call (i.e. if the reference count = 1) then this segment is removed from memory. In any event, this segments descriptors are turned back into JSR $$LOADIT.L instructions and this segment in unlinked from the active segment list. ZZUNLOAD: BSR JMP REMOVE1 (AO ) Page 082 28 Sap 82 379A, 379AI 379A, 379A, 379A, 3796'" 0004 353C'" 025E 379AI 379AI 200B 379CI 2FOD 379EI 6100 37A21 37A21 4A2D 37A61 67** 37A91 37A81 24S0 37ACI 60** 37AEI 37A6* OS 37AEI 24S0 37AC* 04 37B21 2A5F 37B4, 2S4A 37BSI 204A 37B81 5148 37BAI 2F08 37BCI 2050 37BEI 53A8 37C21 6E** 37C41 2268 37C91 21E1 37C2* 08 37CCI 245F 37CEI 24A8 37D21 2250 37041 2468 37081 5889 PAGE - 137 370AI 37DEI 37EOI 37E21 37E41 37E81 37EAI 37ECI 37ECI TPR: MON11. TEXT Page 093 REMOVE1 - Remove the top segment and place its return address in AO. This routine is called b~ the global GOTO routine as well as the normal unloader. REMOVE1: MOVE.L MOVE.L BSR RUNUTST TST.B BEQ.S GETUFST MOVE.L BRA.S GETZFST *"''''''' FFA8 # FF90 # FFFO # @1 MOVE.L MOVE.L MOVE.L SUB.W MOVE.L MOVE.L SUBQ.L BGT.S MOVE.L MOVE.L 0014 OOOC OlOC 0020 MONITOR OOOE 37E~ 4C 6F 61 64 65 72 20 37F51 45 72 72 SF 72 20 20 37FCI 37FCI 37FC, 37FC, 37FC, 37FCI 37FCI 37FC, 37FCI 37FCI 37FCI 37FCI 37FC, 37FCI 37FCI 375S'" OOAS 3S04'" OiF8 35B2'" 024A 3582'" 027A 37FCI 4E5S FFFE 38001 2FOO 3802, 43FA FFEA 380S, 343A FFE4 380AI S100 "'**'" 380EI 201F 38101 43EE FFFE 3814, 7402 381S1 32BC 0030 381AI 6000 "'''''''''' 381EI 381EI 381E, 381E, 381E, 38lE, 38lE, 38lE, 38lE, 38lE, 381E, 38lE, 5C8F 38201 SO"'''' 3822, 48E7 8080 382S1 4lFA FFFS FILE: PAGE - 138 MONITOR running user for the debugger? , LELPL LEPL -16(A5),A2 (A7)+,A5 A2,A3 A2,AO #8,AO AD, -( A7) (AD), AO #1,20(AO) STILLIN 12( AO ), A1 -(A1), S10C (AO) = descriptor of exited segment. Bump counter. Still active? Yes. Don't free memory. No. Fetch old top of memor~ .,. ... store it in current top. (A7 )+, A2 24( AO ), (A2 ) (AO),Al 32(AO), A2 #4,A1 Update active .,. . .. segment list. (A1) = first descriptor (A2) = 1st dscriptor in next segment. Skip relative offset field. MOVE.W MOVE.L CMPA.L BLT.S MOVE.L MOVE.L RTS #S4EB9,(A1)+ A3, (A1 )+ A2,A1 UN. LOOP 16(AO),AO OO,A3 Store JSR xxx.L opcode. Fill in abso lute address fie ld. More descriptors? Yes. Go do 'em. No. Load seg's return address. Restore A3 . WORD . ASCII 14 'Loader Error STILLIN: MOVE. L MOVE.L MOVE.L MOVE.L UN. LOOP: AODQ. L FILE: MONLOAD.TEXT 32FC 4EB9 22CB B3CA SOF4 20S8 0010 2640 4E75 save A3 -88(A5) @1 A2 -112(A5),A2 @2 A2 MOVE.L @2 0018 A3,DO A5,-(A7) SETUPA5 cop~ ZFIRST into A3 for later patch compute ZFIRST-8 in AD ERROR - Fatal loader errors come here. error# is in DO #0 Unknown segment. #1 No room in memor~. #2 Bad block. #3 Can't read code file. #4 Jump Table Too Large. stack o -2 ERROR LINK MOVE.L LEA MOVE.W BSR MOVE.L LEA MOVE.L MOVE.W BRA old AS error number AS,#-2 DO, -(A7) LEPL,Al LELPL,D2 PRINT (A7)+,DO -2(AS),Al #2,D2 #$30, (A1 ) PRNTERR allocate: errornumber address and length address and length initialize error number to '0' . INCLUDE SYMDBUG.TEXT FILENAME: SYMDBUG All the trap handlers for launch ; V31A V31 ADD.L BRA.S MOVEM.L LEA SYMDBUG.T~XT #S,A7 V31X DO/AO,-(A7) V31A,AO discard SR and PC setup temporary NMI handler 28 Sap 82 382AI 3820'" 382EI 38321 38381 383AI 383CI 38401 38441 38481 384CI 384EI 21C8 OC 46EF 203C 5380 66FC 41FA 21C8 41FA B1EF 66** 21CE TPR: MONU. TEXT 007C 0008 0001 0000 V31X @1 FFE4 007C CFEO OOOA 0140 Page 084 MOVE.L AO,S7C to wait for user to lift his finger MOVE MOVE.L SUBQ.L BNE.S LEA MOVE.L LEA CMP.L BNE.S MOVE.L 8(A7},SR #S10000, DO #1,00 ®1 V31,AO AO,S7C HANOLER,AO 10(A7),AO ®2 A6,S140 allow another interrupt dela~ about 1/4 a second fall thru to here if no NMI else go to V31A If handler didn't get to move A6 into S140 then do it now 384C'" 04 38521 38561 385AI 385CI 385CI 38601 38621 38661 38681 386CI 386EI 38721 38741 38781 387AI 387EI 38801 38841 38861 388AI 388CI 38901 38921 38961 38981 38981 389CI 389EI 389EI 389EI 389EI 389EI 389EI 389C* 3896* 3890'" 4CDF 0101 3F'3C 001F 60** (12 3F3C 60** 3F3C 60** 3F3C 60** 3F3C 60** 3F3C 60** 3F3C 60** 3F3C 60** 3F3C 60** 3F3C 60** 3F3C 60** V2 0002 MOVEM.L (A7 )+, OOIAO MOVE.W #31, -(A7) BRA.S SOFTBO 0003 V3 0004 V4 0005 V5 0006 V6 0007 V7 0008 V8 0009 v9 OOOA Vl0 OOOB Vll 3F3C 0018 60** V24 MOVE.W BRA.S MOVE.W BRA.S MOVE.W BRA.S MOVE.W BRA.S MOVE.W BRA.S MOVE.W BRA.S MOVE.W BRA.S MOVE.W . BRA. S MOVE.W BRA.S MOVE.W BRA.S #2, - (A7) SOFTBO #3, -(A7) SOFTBO #4, - (A7) SOFTBO #5, -(A7) SOFTBO #6, -(A7) SOFTBO #7, - (A7) SOFTBO #8, - (A7) SOFTBO "9, -(A7) SOFTBO #10, -(A7) SOFTBO MOVE.W BRA.S #24, -( A7) SOFTBO #l1,-(A7) SOFTBO Soft break point trap handler 3F3C 002C 04 OA 10 SOFTBPT MOVE.W #44,-(A7) soft bpt exception is SBO 388A* 16 3884* lC 387E* 22 3878'" 28 3872* 21:: 386C* 34 3866* 3A PAGE - 139 3860* 385A'" 38A21 38A61 38A81 38ASI 38A81 38A81 38ACI 38BOI 38BOI 38B41 38B81 38BAI 38BEI 38B8* 38COI 38C41 38C41 38C81 38CAI 38CCI 38CEI 38BE* 38001 38041 38061 38081 380CI 3804* 380CI 38EOI 38E21 38E21 38E61 MONITOR FILE: SYMOBUG.TEXT 40 46 48E7 FFFE 4286 SOFTBO MOVEM.L 00-07IAO-A6,-(A7} CLR.L 06 06: =n i I setup 04 with exception index and 05 with @user reg save area 382F 003C 6100 *"''''''' 2A20 OC44 6F"'· 206F 60"'''' 06 41EF FF98 0003 MOVE.W BSR GETUREG MOVE.L CMP.W BLE.S MOVE.L BRA.S # 0040 003E 2C20 FF8C 2246 2208 2208 4A58 10 OC44 002C 66** 5588 2F48 0040 ®1 # ®2 GOOOPC 06 4A20 FFA8 67** 2260 FF90 60** # # 60(A7),04 SETUPA5 OS -104( AS ),05 #3,04 ®1 64(A7},AO ®2 LEA 62(A7),AO GETACCA 06 MOVE.L -116(A5),06 MOVE.L 06,A1 MOVE.L !AO )+, ~Al ~+ MOVE.L AO)+, Al + TST. W AO )+ CMP.W BNE.S SUB.L MOVE.L RUNUTST #44,04 GOOOPC #2,AO AO, 64( A7 } TST.B -88(A5 ) BEQ.S ®1 GETUFST A1 MOVE.L -112(A5), A1 BRA.S ®2 @user reg save area get stacked pc into AO same as MOVE.L 72(A7),AO adjust for TRAP instruction and update stacked pc running user for the debugger ? 28 Sep 8:2 3SESI 38EO* 06 38E81 2260 38E6* 04 38EC, S149 38EE, 6100 38F2, OC44 38F61 66** 38F81 4A41 38FAI 68** 38FC, 2478 3900, 341A 3902, 68** 3904, B242 3906, 67** 3908, 4A9A 390AI 60F4 3906* 04 390C, BOSA PAGE - 140 390E, 67** 39101 4A5A 39121 60EC 390E* 04 39141 3092 39161 41F'A 391AI 21C8 391EI 3902* lA 38FA* 22 38F6* 21; 391E, 4A20 39221 67** 39241 39241 2060 3928, 2268 392C, 3304 392E, 3301 3930, 3300 3932, 2305 3934, 2306 39361 2149 393A, 4A86 393C, 4COF' 3940, 67** 3942, 504F 39441 60** 3946, 3922* 22 39461 41\86 39481 4COF 394C, 67** 394E, 504F 394C* 02 3950, 544F 3952, 2F38 3956, 4E75 39S81 39581 3958, 3944* 12 3940* 16 3958, 42B8 395C, 39SC, 395C, 395C, 2F08 395E, 2F'00 3960, 6100 39641 3964, 2060 3968, OOFC 396CI 48EO 39701 215F 3974, 21SF PAGE - 141 39781 397AI 397EI 39821 39841 3988, 398CI 3994, 3994, 39941 3994, 3994, 3998, 399C, 39AO, 39AO, 3S1F 315F 21SF 3F04 2F'38 4268 06A8 TPR:MONll.TEXT til F"F"F"O # @2 012C FINOBP MONITOR GETUST At MOVE.L **** 002C SUB.W BSR CMP.W BNE.S TST.W BMI.S MOVE.L MOVE.W BMI. S CMP.W BEQ.S TST.L BRA.S FNOSEGN CMP.W FILE: SYMOBUG.TEXT BEQ.S TST.W BRA.S -16(A5), Al #8,A1 AOTOSO #44,04 SOF'TXIT 01 SOFTXIT $12C, A2 (A2 )+, 02 SOFTXIT 02,01 F'NOSEGN (A2 )+ FINOBP FFAS • FF94 003C # Same segment ? No, then skip seg offset end save cell No, then skip save cell 7FFF TST.L MOVEM.L BEQ.S AOO.W 06 (A7)+,00-07/AO-A6 (i2 #8,A7 OF7C AOO.W MOVE.L RTS #2,A7 SF7C, -(A7) ~1 Get start of break point table End of table? FNOSEGO (A2 )+ F'INOBP -88(A5 ) (i1 AO -108(A5),AO 60(AO),Al 04,- Al 01,- Al 00,- Al 05,- Al 06,- Al Al, 60( AO) 06 (A7)+,00-07/AO-A6 RNNGUSR #8,A7 RNNGUSR 003C bad seg# ? Same segment offset ? TST.B BEQ.S GETOREG MOVE.L MOVE.L MOVE.W MOVE.W MOVE.W MOVE.L MOVE.L MOVE.L TST.L MOVEM.L CEQ.S AOO.W BRA.S 7FFF' compute ZFIRST-8 in AO (A2 )+, DO FNOSEGO MOVE.W (A2 ), (AO ) LEA PUTBACK,AO MOVE.L AO,S57C SOFTXIT RUNUTST **** 057C Page 085 put saved word back into code for user ptr to put back code Were we running the user for the sym debugger? Yes, push parameters for sym debuggers ERROR onto symbolic debuggers stack 1 exception number 2 segment number 3 segment offset 4 @user reg save area 5 ®access address record now update stack pointer didn't delete except number (for later) No, then go to macsbug Exception handling for the symbolic debugger 057C RNNGUSR MOVE.L #O,S57C save the users registers **** FF98 0040 F'F'FF 0034 0020 MONITOR MOVE.L MOVE.L BSR GETUREG # MOVE.L AOO.W MOVEM.L MOVE.L MOVE.L FILE: SYMOBUG.TEXT MOVE.W MOVE.W MOVE.L MOVE.W MOVE.L MOVE.W AOO.L 0044 0040 0140 0046 0000 OOOA 003C AO, -(A7) AS, -( A7) SETUPA5 AO -104(A5),AO #64,AO 00-07/AO-A7, -(AO) (A7 )+, S2(AO) (A7 )+, n(AO) A7)+,04 A7 )+, 68( AO ) A7 )+, 64( AO ) 04, -(A7) S140,-(A7) #0, 70( AO) #1O,60(AO) ! save AO on tos paint AO just above reg save area save Os and As now save AS now save AO get except number out of the way S8ve SR save PC push except number on tos for later also push users old A6 on tos too adjust saved A7 sWitch to debugger 4220 FFA8 6100 **** 6100 **** # RUNUCLR MOVE.B #0, -S8(A5) RSTRXCP BSR BSR SWAPJT runuser:=false load de buggers registers and call symbolic debugger 28 Sep 82 39AOI 39AOI 39AOI 39A41 39A41 39ASI 39ACI 39801 39821 39821 39821 39821 39841 39881 39881 398CI 39COI 39C41 39C41 39CSI 39CCI 39CCI 39CCI 39CCI 39001 39041 390~ 390Al 390AI 390AI 390AI 390AI 390EI 39E21 39E41 39E81 39E81 39E81 39E81 PAGE 39ECI 39FOI 39F21 39F21 39F21 39F2! 39F4! 39F61 39FC! 39FE! 39FE! 39FEI 39FEI 3AOO! 3AOO! 3A021 3A04! 3A041 3A04! 3A041 3A061 3AOSI 3A081 3A08! 39FO* 3A081 3AOAI 3AOCI 3A121 3AI4t 3A161 3A161 3A161 3A1St 3A1St 3A16t 3A1St 3A16t 3A1St 3A16t 3AI6t 3918* 3A1SI 3AIA! 3AICI 3A221 3A281 3A2CI 3A3Ot 3A3St 3A38t 3A3A1 3A3A1 3A3At TPR: MON11. TEXT 2260 FFAO # 2060 FF94 OOFC 0030 4COS FOOO 4E91 # GETERRP MOVE.L GETDREG MOVE.L AOO.W MOVEM.L JSR Al -96(A5), Al AD -108(A5),AO #48,AO Page 086 load Al with @ERROR ~~~~+,A4-A7 COl 11 it save the de buggers registers 2FOO 6100 "'''''''''' 2060 FF94 OOFC 0040 48EO OOOF # 2060 FF94 215F 0034 # MOVE.L 8SR GETOREG MOVE.L AOO.W MOVEM.L GETOREG MOVE.L MOVE.L A5, -(A7) SETUPA5 AO -108(A5),AO #S4,AO A4-A7, -(AO) AO -108(A5),AO (A7 )+, S2(AO) point AO just above reg save area now save AS switch back to user 6100 *"'** 6100 "'*** IS7C 0001 FFA8 # BSR SWAPJT BSR POKEXCP RUNUSET MOVE.B #1,-88(AS) runuser:=true load user registers 2060 FF98 4C08 OOFF 4A9S 4COS FEOO # GETUREG AO MOVE.L -104(A5),AO MOVEM.L AOj+,00-07 TST.L AO + MOVEM.L AO +,A1-A7 ! now is later (ie time to look et the except number) 21DF 0140 - 142 MONITOR MOVE.L FILE: SYMOBUG.TEXT OCSF 002C 66** CMP.W BNE.S 2F'18 3Fl8 91FC 0000 0026 2050 MOVE.L MOVE.W SU8.L MOVE.L yes, (A7)+,SI40 j #44, (A7)+ NOT44 restore users old A6 (we ran debugger) do we need to putback the TRAP ? load user reg isters (AO )+, -(A7) (AO)+,-(A7) #70-32,AO (AO), AO call putback (like macsbug would) 2F'08 MOVE.L 4E71 4E71 AO,-(A7) 8SRPUT8 NOP NOP 20SF 4E:73 8SR PUT8ACK MOVE.L RTE (A7)+,AO no, just load user reg isters 16 2Fl8 3FlS 91FC 0000 0026 2050 4E73 NOT44 MOVE.L MOVE.W SU8.L MOVE.L RTE (AD )+, -(A7) (AO )+, -(A7) #70-32, AD (AO ), AO Enter here from Macsbug stack: long: word: long: long: long: OOFE 4288 2F08 21EF 21F8 41F'A 21C8 006F 20SF 4E75 057C OOOE OS68 0024 OS6C "'*"'''' 0024 8000 OOOC PUT8ACK CLR.L MOVE.L MOVE.L MOVE.L LEA MOVE.L ORI. W MOVE.L RTS PC SR AD saved by Mscsbug Return address AO saved by this routine SS7C AO, -(A7) 14(A7),SS68 S24,SS6C PUTBAK2,AO AO,S24 #SSOOO,12(A7 ) (A7 )+, AD Temp trace handler clear ptr to this routine workl saves the pc work2 saves the trace handler setup new trace handler turn on tracing 28 Sep 8:2 3A3AI PAGE - 143 3A3AI 3A3AI 3A3AI 3A3AI 3A3AI 3A2A'" 0010 3A3AI 2FOS 3A3CI 207S 3A401 30BC 3A441 20SF' 3A461 2iF'S 3A4CI 4A7S 3ASOI 66*'" 3AS21 0257 3AS61 4E73 3ASO'" 06 3ASSI 2F3S 3AsCI 4E7S 3ASEI 3ASEI 3ASEI 3ASEI 3ASEI 3ASEI 3ASEI 3ASEI 3ASEI 3ASEI 3SF'0'" 016E 3AsEI 22Si 3A601 60""" 3A621 2269 3A661 2209 3A6S1 6E-:"'''' 3A6AI 72F'F' 3A6CI 4280 3A6EI 4E75 3A701 3A68'" 06 3A60'" OE 3A701 2008 3A721 90A9 3A761 6BEA 3A781 2229 3A7CI BOSl 3A7EI 6CE2 3ASOI 3A801 3A801 3A801 2209 3A821 928C 3A841 EA81 3A861 5281 3A881 4E75 3ASAI PAGE - 144 3A8AI 3ASAI 3A8AI 3A8AI 3A8AI 3A8AI 3A8AI 3A8AI 3A8AI 3ASAI 3A8AI 3A8AI 3A8EI 3A921 3A961 3A981 3A9CI 3A9CI 3AAOI 3AA21 3A96* 3AA21 3AAO* 3AA61 3AA81 3AAAI 3AAEI 3ABOI 3AB41 3AB61 3ABAI 3ABCI 3ABA>I< 3ACOI TPR: MONll. TEXT MONITOR Page 087 ; stack: F'ILE: SYMOBUG.TEXT long: word: long: 0568 4E4C Os6C 0024 0550 7F'F'F' 0024 PC SR AD saved by this routine PUTBAK2 MOVE.L MOVE.L MOVE.W MOVE.L MOVE.L TST.W BNE.S ANOI. W RTE AO, -(A7) $S68,AO #$4E4C, (AO) (A7 )+, AO $S6C,$24 $550 PUTBAK3 #$7F'F'F', (A7 ) PUTBAK3 MOVE.L RTS $24, -( A7) put back the soft brk pt put back the trece hendler test macsbug trace flag turn off tracing return to user code ; go to Macsbug to handle Trace AOTOSO -- CONVERTS AO TO SEGNUM AND OF'F'SET Enter With: Exit With: AO address Al address of the active seg list ptr 01 .. segnum DO offset using adjusted stacked pc find pOinter to segment table entry AOTOSO 001S MOVE.L BRA.S NEXTSEG MOVE.L MOVE.L BGT.S MOVE.L CLR.L RTS (A1), Al F'INOLP 24(Al ), Al A1,01 F'INOLP #-1,01 DO get ptr to next segment table TST.L Al F'INOLP AO,OO 12( Al ), DO NEXTSEG 8(Al).01 01,00 NEXTSEG get segment size OOOC 0008 MOVE.L SUB.L BMI. S MOVE.L CMP.L BGE.S get pOinter to first segment on the list comp~ta offset within segment enter with pointer to segment tabla entry in A1 , MONITOR MOVE.L SUB.L ASR.L AOO.L RTS Al,Ol A4,01 #5,01 #1,01 ; Compute segment number (A1-A4 )/32+1 F'ILE: SYMOBUG.TEXT PROCEDURE AOOR2S0(USER:INTEGER; ADDRESS: LONGINT; VAR SEGNUM,OF'F'SET:INTEGER) stack: 24 20 16 12 8 4 o flag indicating process (O=SYM DEBUG, l=USER) address (isegnum (ioffset Return Address Old AS Old A6 ; 4ES6 0000 206E 0014 4A6E 001S 67*'" 6100 **"'''' 2260 F'F'90 60"'''' OA 2260 04 5149 61B4 206E 3081 206E 3080 4A6E 67** 6100 04 4E5E F'F'F'O AOOR2S0 LINK MOVE.L TST.W BEQ.S BSR GETUF'ST # MOVE.L BRA.S (i1 GETZF'ST MOVE.L # (i2 0010 OOOC 0018 "'*"'''' ®3 A6,#0 20~A6~,AO 24 A6 (i1 SWAPJT Al -112(AS),Al (i2 A1 get address to convert running user for the debugger? -16( AS ), A1 SUB.W BSR MOVE.L MOVE.W MOVE.L MOVE.W TST.W BEQ.S BSR #8,Al AOTOSO 16( A6 ), AO 01, (AO) 12( A6 ), AO ~O, (AO) 24( A6 ) (i3 SWAPJT UNLK A6 compute ZF'IRST-8 in Al return segnum return offset running user for the debugger? 28 Sep 82 3AC2, 3AC4, 3AC6, 3ACA, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, 3ACC, PAGE 2ASF 20SF DEFC OOOE 4EDO MOVE.L MOVE.L ADD.W JMP Page 088 (A7)+,AS (A7 )+, AD #14,A7 (AO) PROCEDURE PMADDR2S0(USER:INTEGER; ADDRESS: LONGINT; VAR SEGNUM,OFFSET:INTEGER) PMADDR2S0 converts address to segment and offset for the debugger process while it is running in the users environment. Note the meaning of user is reversed. stack: 24 20 16 12 8 4 o , - 145 3ACC, 4ES6 3ADO, 206E 3AD4, 4A6E 3AD8, 67** 3ADA, 6100 3ADE, 3ADE, 2260 3AE2, 90** 3AE4, 3AD8* OA 3AE4, 2260 3AE2* 04 3AE81 5149 3AEAI 6100 3AEEI 206E 3AF21 3081 3AF41 206E 3AF81 3080 3AFA, 4A6E 3AFE, 67** 3800, 6100 3AFE* 04 38041 4E5E 38061 2ASF 38081 20SF 380AI DEFC 380EI 4£00 38101 38101 38101 38101 38101 3810, 3810, 38101 38101 3810, 38101 3810, 3810, 38101 4ES6 38141 38141 38141 38141 2F08 38161 38161 2060 381AI DOFC 381EI 48EO 38221 21SF 3826, 216E 382C, 216E 3832, 40E8 3836, 0268 383C, 4268 PAGE - 146 3840, 3840, 3840, 3840, 3844, 3844, 3848, 3848, 3848, 3848, 384C, 384C, 38501 38501 TPR: MON1L TEXT MONITOR PMADDR2S FILE: SYMD8UG.TEXT 0000 0014 0018 **** FFFO # ®1 FF90 flag indicating process (1=SYM DE8UG, O=USER) address ®segnum @offset Return Address Old AS Old A6 # LINK MOVE.L TST.W BEQ.S 8SR GETZFST MOVE.L 8RA.S GETUFST MOVE.L (12 FF72 0010 OOOC 0018 **** ®3 OOOE A6,#0 20~A6~'AO 24 A6 (ill get address to convert running user for the debugger? SWAPJT Al -16(AS),Al ®2 Al -112 (A5 ), A1 SUB.W BSR MOVE.L MOVE.W MOVE.L MOVE.W TST.W 8EQ.S 8SR #8,Al AOTOSO 16(A6),AO Dl,(AO) 12(A6),AO DO, (AO ) 24( A6 ) ®3 SWAPJT UNLK MOVE.L MOVE.L ADD.W JMP A6 ~A7~+,A5 A7 +,AO #14,A7 (AO) compute ZFIRST-8 in A1 return segnum return offset running user for the debugger? LAUNCH -- Called by symbolic debugger to launch user process stack: 24 20 16 12 8 4 0 address object file address error proc address of parms: J. T. address of jump table return address saved AS old A6 load addr, size, data size ; 0000 LAUNCH LINK A6,#0 save the debuggers registers FF94 0040 FFFF 0020 0004 0034 0008 0040 0044 7FFF 0044 0046 MONITOR MOVE.L GET DREG # MOVE.L ADD.W MOVEM.L MOVE.L MOVE.L MOVE.L MOVE ANDI.W MOVE.W FILE: SYMD8UG.TEXT AO,-(A7) AO -108(As),AO #64,AO DO-D7/AO-A7,-(AO) (A7)+,32(AO! 4(AG),S2 AO 8(AG ),64 AD SR,68(AO #$7FFF, 68 ( AO ) #0, 70(AO) save ptr to fib 206E 0018 2848 FFA4 # MOVE.L 24(A6),AO PUTUFI8 AD MOVE.L AO,-92(AS) save ptr to error proc 206E 0014 21348 FFAO # MOVE.L 20(A6),AO PUTERRP AO MOVE.L AO.-96(A5) range check jump table size save AO on tos point AO just above reg save area save Os and As now save AO and real AS save return PC and slightly modified SR make sure tracing is turned off 28 Sap 82 3B501 38501 20SE 38541 OeS8 385AI S3** 385CI 7004 385EI SOOO 38S21 38S21 38S21 385A* 015 38S21 20SE 38SS1 38SS1 2B4S 38SAI S100 38SEI 38SEI 38SEI 38SEI 9F"FC 38741 SlOO 387S1 387S1 187C 387EI 387EI 387EI 387EI 26SE 38S21 2058 38S41 4A98 38S61 2E18 388S1 388S1 38881 388S1 3410 38BAI E84A 388CI 2270 38901 38901 2460 38941 234A 389S1 389S1 2460 389CI 234A 38AOI 4869 PAGE - 147 38MI 3BASI 38AAI 38AAI 38AEI 38AEI 38821 388S1 388AI 388EI 38COI 38C41 38CSI 38CSI 38CSI 38C81 38CSI 38CCI 38CCI 38DOI 38DOI 38DOI 38DOI 38D21 3SD41 38D61 38DAI 3SDCI 38DCI 38DCI 3876* 39D2* 38DCI 38DEI 38E21 38ESI 38EAI 38EEI 38F2, 38F6, 38FAI 38FEI 3C02, 3C061 3COAI 3COE, 3C121 3C16, 3CIAI 3CIEI 3C22, 3C261 TPR: MONl!. TEXT 0010 1800 0004 MOVE.L CMP.W 8LS.S MOVE.L 8RA FC9C 16( A6 ), AO #UJMPTOP-UJMPT8L,4(AO) ®l #4,DO ERROR swap jump tables (just swap 6k brute force) OOOC FF9C **** @1 # MOVE.L 12(A6),AO PUTUJPT AO MOVE.L AO,-100(A5) 8SR SWAPJT setup user state 0000 2000 **** 0001 FF'A8 # SU8.L #$2000,A7 8SR POKEXCP RUNUSET MOVE. 8 #1,-BS(A5) leave Sk b~tes for debugger runuser:=true address, Jump tab Ie size and commons ize MOVE.L MOVE.L TST.L MOVE.L 0010 t' lS( A6 ), A3 get address as baseloc in AO skip bytes left get commonsize in D7 !A3 A3 + AO A3 +,D7 startit up, AO contains baseloc ( ie. $STOP) 2002 FFAE 0004 FFM 0008 0014 MONITOR MOVE.W LSL.W MOVE.L GETISF # MOVE.L MOVE.L GETUFI8 # MOVE.L MOVE.L PEA FILE: SYMD8UG.TEXT 42S7 48E7 1F3E 2F20 FFE8 2F'20 4BEF 20S8 4EAS 50 SF 4COF 4A5F 5aSF Page OB9 FFEC FFFS 0002 0004 # # 7CF8 MOVE.W MOVEM.L GETOFI8 MOVE.L GETIF'I8 MOVE.L LEA MOVE.L JSR AODQ.L MOVEM.L TST.W AOOQ.L (AO ), D2 #5,D2 2(AO,02.W),Al A2 -B2~A5~,A2 A2,4 Al A2 -92~A5~,A2 D2 number of segments *32 address of SSFIRST-20 Al Move address of buffer to S$FIRST-16 A2,B Al 20( AI) Move address of objfile to $SFIRST-12 Push pointer to S$F'IRST #0,-(A7) ; D3-07/A2-AS,-(SP) -(A7! ; -24 A5),-(A7) -(A7 ; -20 AS), -(A7) -S(SP),AS 2(AO),AO 4(AO} #B,SP , (SP)+,03-D7/A2-AS (SP)+ ; #4,SP Dummy push for Segment 8ank Word +12(A5) = ®OUTPUT +B(AS) = @INPUT Set AS so lS(AS) = P-regs. AO Main Program Entry - 4 Start her up! Restore the registers = Throwaway dummy Segment 8ank Word Eliminate pointer to $SFIRST get back to debugger S100 **** 4220 FFAS # 8SR SWAPJT RUNUCLR MOVE. 8 #O,-BB(AS) exit 4E5E 2A5F 205F DEFC 0010 4EDO UNLK MOVE.L MOVE.L ADO.W JMP A6 (A7 )+, AS (A7)+,AO #16,A7 (AO ) restore global ptr pop return address delete parameters POKEXCP -- poke exception vectors for the 00S6 020A 2FOB 41FA 21CB 41FA 21CS 41FA 21CB 41FA 21CB 41FA 21CB 41FA 21CB 41FA 21C8 41FA 21CB 41FA 21C8 41FA FC7C 0008 FC7A OOOC FC7B 0010 FC76 0014 FC74 0018 FC72 001C FC70 0020 FC6E 0024 FC6C 0028 FC6A POKEXCP MOVE.L LEA MOVE.L LEA MOVE.L LEA MOVE.L LEA MOVE.L LEA MOVE.L LEA MOVE.L LEA MOVE.L LEA MOVE.L LEA MOVE.L LEA AO, - (A7 ) V2,AO AO,S8 V3,AO AO,SC V4,AO AO,SI0 V5,AO AO,SI4 V6,AO AO,S18 V7,AO AO, $1C V8,AO AO,S20 V9,AO AO,S24 VI0,AO AO,S28 Vll, AO s~mbolic debugger 28 Sap 82 3C2AI 3C2EI 3C321 PAGE 3C361 3C3AI 3C3EI 3C401 3C421 3C421 3C421 3C421 TPR:MONll.TEXT 21C8 002C 41F"A F"C68 21C8 0060 - 148 MONITOR 41F"A F"SEA 21C8 007C 20SF" 4E75 LEA MOVE.L MOVE.L RTS , 93C9 207C 3C4AI 303C 3C4EI 2208 3C501 SlC8 3C541 4E75 3C561 3C561 3C561 3SCA>I< 008C 3S6C>I< OOEA 3B02>1< 0154 3AOC>I< 017A 3ASE>I< 0198 3A9A* OlBC 3C561 303C 3C5AI 224C 3C5CI 3C5CI 2460 3C601 3211 3C621 3202 3C641 34C1 3C661 5340 3C681 66F"6 3C6AI 4E75 3C6CI 3C6CI 3C6CI 3C6CI 3C6CI 3C6CI 3C6CI 3C6CI 3C6CI 3C6CI 3C6CI 3C6CI 3C6CI 4220 3C701 41EF' 3C741 30BC 3C781 21C8 3C7CI 3C7CI 2060 3C801 303C 3C841 4298 3C861 51C8 3C8AI 4E~75 3C8CI PAGE - 149 3C4~ 3C8CI 3C8CI 3C8CI 3C921 3C941 3C941 3C941 3C941 3C9S1 3C9S1 3C9CI 3C9E1 3CAOI 3CA41 3CASI 3CACI 3CAEI 3CAEI 3CB21 3C821 3C861 3CB81 3C9C>I< 3CBSI 3CBC, 3CBCI 3CCOI 3C86* 3CCOI 3CC41 3CCAI 3CCCI MOVE.L LEA MOVE.L F"ILE: SYM08UG.TEXT F"F"F"C V31,AO AO,$7C (A7)+,AO #$OOOOOOOO,A1 #$OOOOOF"OO,AO #63,00 (AO)+,(A1)+ 00,(1)1 zero page length is 64 longs SWAPJT -- swap user and debugger jump tables SWAPJT OCOO F"F"9C # @1 MOVE.W MOVE.L GETUJPT MOVE.L MOVE.W MOVE.W MOVE.W SUB.W SNE.S RTS #UJMPTOP-UJMPTSL12,OO A4,A1 A2 -100(A5), A2 (A1}' 01 (A2 ,( A1 )+ 01, A2)+ #1,00 fill . INCLUDE COMMAND. TEXT F"ILENAME: COMMAND , F"F"A8 0004 F"F"F"F" 012C F"F"60 0007 F"F"F"C INITPRG INITPRG RUNUCLR MOVE.S LEA MOVE.W MOVE.L GETLOGN # MOVE.L MOVE.W (ill CLR. L OBF" RTS # #0,-8S(A5) 4(A7),AO #$F"F"F"F',(AO) AO,$12C AO -160(A5),AO #MAXOEV,OO (AO )+ OO,@l setup end of break point table clear LOGN bit for each unit each dev ; MONITOR F"ILE: COMMAND. TEXT , SETUPA5 SETUPA5 MOVE.L RTS 2A7C 0000 0000 4E75 , 245F" 61F"4 2038 67>1<>1< 2040 OOF"C 3228 C3F"C 0081 AO,S2C V24,AO AO,S60 RSTRXCP -- restore exception vectors for macsbug RSTRXCP MOVE.L MOVE.L MOVE.W @1 MOVE.L OBF" RTS 0000 OFOO 003F" Pege 090 #$00000000,A5 GETREGS GETREGS MOVE.L BSR MOVE.L BEQ.S MOVE.L 0144 @1 (A7 )+, A2 SETUPA5 $144,00 @1 OO,AO ADD.W #2>1 to continue' set buffer bottom return ; OOOA 49 2F 4F 20 45 72 72 6F 72 20 ILPL IPL 001A 20 74 3C 73 20 74 74 69 TLPL TPL 79 70 6F 6E 70 61 20 75 , 65 3A 20 63 65 3E 63 6F 6E 65 IOCHK ; 4ES6 FFFC 2060 1050 67** 43FA 343A 6100 - 150 30161 43EE 301AI 7402 301CI 32BC 30201 4280 30221 102E 30261 80FC 302AI 4840 302CI 0200 30301 0129 30341 4840 30361 0200 303AI 67*", 303CI 0600 30401 1:280 303A* 06 30421 6100 30461 43FA 304AI 343A 304EI 6100 30521 6100 30561 101F 30581 OCOO 305CI 66F4 30SEI 6000 30621 3008* sa 30621 4E5E 30641 41:::75 30661 30661 30661 30661 oeoo 30SAI SI)** 30SCI oeoo 30701 6E** 30721 0400 3070* 04 306A* OA 30761 4E7S 30781 30781 30781 30781 0000 30801 0000 30821 30821 30821 30821 30821 30821 30821 30821 30821 30821 4A11 30841 67** PAGE - 151 30861 30881 308CI 308EI 30901 30941 309S1 309AI 309EI 30AOI 308E'" 30A41 3F09 3228 0101 67** 43E8 7401 S100 43FA 740A 6100 14 325F FFFC FFFE FFCA FFC4 "'**'" MONITOR IOCHK LINK GETSYSC MOVE.L MOVE.B BEQ.S LEA MOVE.W BSR FILE: COMMAND. TEXT A6,#-4 AO -4)A5),AO (AO • -2( A6 ) IOCHKX IPL,A1 ILPL, 02 PRINT a Ilocete: @iorslt LEA MOVE.L MOVE.W CLR.L MOVE.B PRNTERR OIVU SWAP ANO.B AOO.B SWAP ANO.B BEQ.S AOO.B MOVE.B -4(A6),Al #2,02 #$30, (Al) DO -2(A6),OO #10,00 DO #7,00 00,1 (Al ) DO #7,00 address and length initialize error number to '0' (ill BSR LEA MOVE.W BSR BSR MOVE.B CMPI.B BNE.S BRA PRINT TPL,Al TLPL, 02 PRINT GETCHAR (A7}+,OO #$20,00 @2 RESTART UNLK RTS A6 # FFFC 0030 FFFE OOOA 0007 0001 0007 0030 **** FF9A FF94 **** **** (il2 0020 **** IOCHKX , UPSHFT 0061 007A 0020 lors Itcopy & errornumber save iorslt address and length get iorslt as 32 bit integer diVide by 10 get remainder leastsig digit get quotient most sig digit (ill #$30,00 d0, (Al ) if most sig digit <> 0 then add '0' address and length get next character loop until is read UPSHFT -- upshift the char in DO CMPI. B #' a' ,DO BLT.S UPSHFTX CMPI. B #' z', DO BGT. S UPSHFTX #32,00 SUB.B less than a ? greater than z DO in a ., z ? so upshift UPSHFTX RTS DELAY FOR SLOW TERMINALS 0000 0000 0000 , WAIT · WORD 0,0,0,0,0 PUTPRFX -- PUT PREFIXED CRTCTRL CHAR ENTER WITH: AO DO Al MONITOR 0014 OOOB "'*"'''' FFOC "'''''''''' ; PUTPRFX TST.B BEQ.S FILE: COMMAND. TEXT MOVE.W MOVE.W BTST BEQ.S LEA MOVE.L BSR LEA MOVE.L BSR PUTPRFl MOVE.W PTR TO SYSCOM WHICH CRTCTRL CHAR @COMMANO CHAR (AI) PUTPRF2 exit if command char Al, -( A7) CRTESC+10(AO),01 00,01 PUTPRFl CRTESC+1(AO),A1 #1,02 PRINT WAIT, A1 #10,02 PRINT save @command char (A7 )+, A1 prefixed? ®esc char length of print esc char address and length restore ®command char nu II 28 Sep 82 30M, 7401 30A81 6100 30AC, 43F"A 30BOI 740A 30B21 6100 3084* 30 30B61 4E75 30B81 30B81 30B81 30B81 30B81 2060 30BCI 7004 30BEI 43E8 30C2, 60BE 30C41 30C41 30C41 30C41 30C41 2060 30C81 43E8 30CCI 4Al1 30CEI 67** 30001 7002 3002, 60AE 30CE* 04 30041 43E8 30081 7007 300A, 60A6 300CI 300C, 300C, 300CI 300CI 2060 30EOI 43E8 30E41 4Al1 30E6, 67** 30E81 7()03 30EAI 6096 30E6* 04 30ECI 43E8 30F"01 7006 30F"21 608E PAGE - 152 TPR: HONll. TEXT MOVE.L BSR LEA MOVE.L BSR **** F"F"CA **** #1,02 PRINT WAIT. Al #10,02 PRINT Page 092 length of 1 print command char address end length PUTPRF"2 RTS , HOMCRSR GETSYSC MOVE.L MOVE.L LEA BRA # F"F"F"C OOOA , # F"F"F"C OOOC 0013 CLRLN CLRLN2 , # F"F"F"C 0000 0012 MONITOR 30F"41 30F"41 004C 30F"61 40 28 61 63 73 30F"01 67 2C 20 55 28 3EO~ 64 20 65 64 69 3EOBI 72 2C 20 47 28 3E121 65 72 61 74 65 3E191 6F 64 65 2C 20 3El~ 44 28 65 62 75 3E251 20 20 20 20 20 3E2CI 20 20 20 20 20 3E331 20 20 20 20 20 3E3AI 20 20 20 20 20 3E411 20 3E421 3E421 3E421 3E421 6100 F"F"74 3E461 6100 FF"7C 3E4AI 43F"A F"F"AA 3E4EI 343A F"F"A4 3E521 60** 3E541 3E541 3E541 3E541 3E541 3F7C 006E 0004 3E5AI 4E75 3ESCI 3E5CI 004F 3E5EI 4D 6F" 6E 69 74 3E651 3A 20 45 28 64 3EGCI 2C 20 43 28 6F" 3E731 69 6C 65 2C 20 3E7AI 69 6C 65 2C 20 3E811 69 6E 6B 2C 20 3E861 58 28 65 63 75 3EBDI 2C 20 41 28 73 3E9~ 60 62 6C 65 2C 3E9BI 28 79 73 60 67 3EA21 20 3F" 20 5B 30 3EA91 31 2E 30 50 20 3EAEI 3EAEI 3EAEI 6100 F"F"08 3EB21 6100 F"nO 3EB61 43F"A F"F"A6 3EBAI 343A F"F"AO 3EBEI 3EBEI HOMCRSR -- HOME CURSOR CLRSCR AO -4( AS). AO #P HOME,OO CRTESC+O(AO),Al PUTPRF"X index to prefix array ®homa char CLRLN - - CLEAR LI NE GETSYSC MOVE.L LEA TST.B BEQ.S MOVE.L BRA AO -4( A5), AO CRTESC+2(AO),Al (AI) CLRLN2 #P ERSEL,OO PUTPRF"X LEA MOVE.L BRA CLRLINE(AO), Al #P CLRLN.OO PUTPRF"X (jerase eol char Index to prefix array (Ilclaar line char index to prefix array CLRSCR -- CLEAR SCREEN GETSYSC HOVE.L LEA TST.B BEQ.S MOVE.L BRA CLRSCR2 LEA MOVE.L BRA rILE: COMMAND. TEXT AO -4( AS). AO CRTESC+3(AO),Al (AI) CLRSCR2 #P ERSES,OO PUTPRF"X (jerese eos char index to prefix array CLRSCRN(AO).Al #P CLRSC,OO PUTPRF"X screen char index to prefix array ~clear ; 62 63 74 65 20 75 73 6F" 6E 63 67 20 20 20 20 20 20 20 20 20 LPL2 PL2 . WORD .ASCII 76 'M(acsbug, U(csd editor, G(enerate code, . ASCI I . O( ebug PROMPT2 -- PROMPT THE USER F"OR A COMMAND ; PROMPT2 BSR BSR LEA MOVE.W BRA.S HOMCRSR CLRLN PL2,Al LPL2,02 PRINT PL address end length , REVISION , 6F" 69 60 46 4C 72 74 70 28 28 74 73 20 72 2E 65 65 53 2C 31 LPL PL MOVE.W RTS #110,4(A7) . WORD .ASCII 79 'Monitor: E(dit, C(ompile, F"(ile, L(ink, . ASCI I . X( ecute, A( ssemb Ie, S( ysmgr, ? [0.11. 0] , high byte 0, low byte PROMPT -- PROMPT THE USER F"OR A COMMAND j PROMPT BSR BSR LEA MOVE.W HOMCRSR CLRLN PL,A1 LPL,D2 PRINT -- PRINT AN ARRAY OF" BYTES PL address and length 11. 0 28 Sep 82 3EBEI 3E8EI 3E8EI 3E8EI 3EBEI PAGE - 153 3E8EI 3E52* 6A 3084* OlOA 30AA* 0114 30A2* 011C 3098* 0126 3050* 016E 3044* 017A 3014* 01AA 3E8EI 3F'3C 3EC21 2209 3EC41 4243 3EC61 7C02 3EC81 6100 3ECCI 4£90 3ECEI 4£75 3EOOI 3EOOI 3EOOI 3EOOI 3EOOI 3054* 017C 3EOOI 205F' 3E021 4267 3E041 220F' 3E061 2F'08 3E081 7401 3EOAI 3F'3C 3EOEI 4243 3EEOI 7C01 3EE21 6100 3EE61 4£90 3EE81 41EF' 3EECI lOla 3EEEI OCOO 3EF'21 67** 3EF'41 oeoo 3EF'81 60*", 3EF'AI 2208 3EF'CI 7401 3EF'EI 3F'3C 3F'021 4243 3F'041 7C02 3F'061 6100 3F'OAI 4E90 3EF'8* 12 3FOCI 4£75 3FOEI 3FOEI 0000 3FlOI 3FlOI 3FlOI 3EF2* lC 3FlOI 43F'A 3Fl41 7401 PAGE - 154 3Fl61 3Fl81 3Fl81 3F181 3Fl81 3FlAI 3F211 3F261 3F2AI 3F2AI 3F2AI 3F2AI 3F2AI 3F2EI 3F301 3F341 3F"381 3F3CI 3F401 3F441 3F441 3F481 3F4AI 3F4CI 3F4CI 3F4CI 3F4CI 3F4EI 3F501 3F541 TPR: MON1!. TEXT ENTER WITH: A1 02 ; MONITOR address length FILE: COMMAND. TEXT PRINT 0001 OA92 MOVE.W MOVE.L MOVE.W MOVE.L 8SR JSR RTS #CONSOLE, - (A7 ) Al,01 #0,03 #OUT8IT,06 GETUNIT (AO) unit# address block# get un it# and va I idate, setup drvr go to driver GETCHAR -- GET A CHAR FROM THE CONSOLE RETURNS THE CHAR ON TOS IN THE MS 8YTE OF WORD GETCHAR MOVE.L .....M()V£~ W MOVE.L MOVE.L MOVE.L MOVE.W MOVE.W MOVE.L 8SR JSR LEA MOVE.B CMPI.B BEQ.S CMPI.B BLT.S MOVE.L MOVE.L MOVE.W MOVE.W MOVE.L BSR JSR 0002 OA78 0004 0000 0020 0002 OA54 (A7 )+, AO #O,-(A7) A7,01 AO, -( A7) #1,02 #SYSTERM, - (A7 ) #0,03 #IN8IT,06 GETUNIT (AO) 4(A7),AO (AO), DO #13,00 WCRLF' #32,00 GETCHRX AO,01 #1,02 #SYSTERM, - (A7 ) #0,03 #OUT8IT,06 GETUNIT (AO) save return address allocate word for result address restore return addrass length unit# block# get unit# and validate, setup drvr go to driver address of char read if char = cr if char >= ' then echo crlf , then echo char address length unit# block# get unit# and validate, setup drvr go to driver GETCHRX RTS ; CRLF . WORD $0000 WCRLF -- write CRLF' to CONSOLE FFFC MONITOR WCRLF LEA MOVE.L FILE: COMMAND. TEXT 8RA 60A6 . WORD . ASCI I 12 'What file? 8SSPBS . WORD $0820,$0800 , FE86 FEA6 FFEO FFOA FF7C 2460 FFAA 264A 421A initialize XEQUTE & GETSYSC MOVE.L MOVE.B XEQUTEO 8SR BSR LEA MOVE.W BSR GETSTRB # MOVE.L MOVE.L MOVE.B # , 6182 101F 6100 FE14 OCOO 0008 PRINT XLPL XPL ; ; FFFC CRLF,A1 #1,02 XEQUTE -- execute a file , OOOC 57 68 61 74 20 66 69 6C 65 20 3F' 20 0820 0800 2060 4210 6100 6100 43FA 343A 6100 Page 093 prompt user for filename AO -4(A5),AO # I NOERR, (AO ) HOMCRSR CLRSCR XPL,Al XLPL, 02 PRINT A2 -86(A5),A2 A2,A3 #0, (A2 )+ initialize iorslt PL address and length @string initialize string read the filename into strbuf XEQUTEl BSR GETCHAR MOVE.B (A7 )+, DO BSR UPSHFT CMPI. B #8,00 get next character and upshift it char = ? 28 Sap 82 3FSBr 67** 3F5Ar 3F"SAr 2060 3FSEr 802B 3FS2r 67CC 3F64r OCOO 3FS8r 67** 3FSAr 5213 3FSCr 67** 3FSEr 14CO 3F70r 600A 3F58* 18 3F"72r 4A13 3F74r 6706 3F76r 5313 3F"78r 4A22 3F7Ar 43FA 3F"7Er 7403 3F80r 6100 3F"B4r 60CS 3FB6r 3FB6r 3FB6r 3F6C* 113 3F"68* Ie PAGE - 155 3F86r 41\13 3F"BBr 66** 3F8Ar 3F"BAr 2060 3F"8Er 10BC 3F"88* 08 3F"92r 4E7S 3F"94r 3F"94r 3F"94r 3F"94r 3F94r 48E7 3F"98r 3F"9Br 1020 3F"9Cr 66"'''' 3F9Er 42A7 3FAOr 487A 3F"A4r 3FA4r 2F,'20 3F"A81 6000 3F"A2'" OOOA 3FACr 301F 3FAEI 3FAEr 1840 3F"9C'" 14 3FB2r 42A7 3F"B41 487A 3FB81 3FB8r 2F'20 3FBCr 6000 3FCOr 3FBG'" OOOA 3F"COr 1020 3FC41 32:1F" 3F"C6r 3F"C6r 20GO 3FCAr 4A2B 3FCEr 67** 3FOOr 123C 3FD4r 422B 3F081 3FCE* 08 3FD81 1841 3FDCI 3FDCr 1420 3FEOr B002 3F"E2r 66** 3FE41 B202 3FE61 66** 3FEBr 3FE81 4220 3F"EC, 3FECI 4220 3FFOI 6100 3FF41 101F" 3F"E6* OE PAGE - ISS 3FE2* 3F"F"6, 3FFAI 3FFCI 3FFCI 3F"FCI 3FFCr 3FFCI 40001 TPR: MON11. TEXT BEQ.S GETSYSC MOVE.L CMP.B BEQ.S CMPI. B BEQ.S AOO.B BEQ.S MOVE.B BRA.S FFFC 0025 0000 XEQUTE4 TST.B BEQ.S SUB.B TST.B LEA MOVE.L BSR BRA.S F"F"AA FF3C XEQUTE4 AD -4( AS1' AD LINOEL AO), DO XEQUTEO #13,00 XEQUTE2 #1, (A3) XEQUTE2 00,(A2)+ XEQUTE1 Page 094 char < I inede 1> ? char ? no then incr string length string overflow? no then append the character go get next character any chars ? (A3 ) XEQUTE1 #1,(A3) -( A2) BSSPBS,A1 #3,02 PRINT XEQUTE1 yes deer string length and discard the last char erase 1 char exit MONITOR FFF"C OOOA FILE: COMMAND. TEXT XEQUTE2 TST.B BNE.S GETSYSC # MOVE.L MOVE.B (A3 ) XEQUTE3 AO -4(A5),AO #INOFILE, (AO) string length zero ? then no file name !::I es , XEQUTE3 RTS , FROMEXEC -- get It character from tha exec file F"ROMEXEC 7F"F"E F"F86 MOVEM.L GETNXCH MOVE.B BNE.S CLR.L PEA GETXFIB MOVE.L BRA # "'''''''''' F"F"82 EFDE F"F86 # @1 @4 CLR.L PEA GETXFIB MOVE.L 8RA GETNXCH -(A7 ) @4 -( A7 ) -12G(AS), -(A7) FREAOCHR DO @S MOVE.B MOVE.W GETXFIB MOVE.L TST.B BEQ.S MOVE.B MOVE.B PUTNXCH -122(AS),00 (A7)+,01 AO -126~AS~, AO F"EOLN AO @S #$0,01 #0, FEOLN( AO ) 01 MOVE.S GETEBST MOVE.B CMP.B BNE.S CMP.B BNE.S PUTEBST MOVE.B PUTNXCH MOVE. 8 BSR MOVE.B 01, -122(AS) 02 -121 (AS ), 02 02,00 @2 02,01 @2 #0 #0, -121(A5) #0 #0, -122(A5) GETCHAR (A7 )+, DO # # FF"82 0004 # 0000 0004 F"F"8G # F"F"87 # F"F"87 # F"F"B6 F"EOE # MONITOR 12 4COF" 7F"F"E 4E75 get next character from console FILE: COMMAND. TEXT ®2 , 2F20 F"F"82 42A7 -(A7 ) li3 -(A7) -126(AS),-(A7) FREAOCHR MOVE.W (A7)+,00 PUTNXCH DO MOVE.B ~O, -122(AS) # FF86 (ill @3 "''''*''' F"F"82 EF"CA 01-07/AO-A6,-(A7) DO -122(AS),00 MOVEM.L (A7)+,Ol-07/AO-A6 RTS OPNEXEC -- open exec file OPNEXEC GETXFIB -(A7 ) # MOVE.L -126(A5), -(A7) CLR.L -(A7 ) ®f i Ie 28 Sep 82 4002\ 40061 400A\ 400AI 400EI 400EI 40121 40161 40181 401CI 401EI 401EI 401EI 401EI 401EI 40221 40241 40261 40281 402AI 402EI 4032\ 40361 403AI 403EI 40401 40421 40421 40421 40421 4044\ 40441 40481 404CI 404EI 40501 4050\ 40541 40561 405AI 405EI 4060\ 4064\ 40681 406AI PAGE 40701 40741 40741 40781 407AI 407EI 40821 40841 404E* 40861 408AI 408AI 408EI 40901 40921 40961 409AI 409AI 409EI 40AOI 40A21 40A21 40A61 40A81 40ACI 40BOI 40B41 40B41 40B81 40BAI 40BCI 40COI 40C41 40C41 40C81 40CAI 40BA* 40AO* 4090* 40CCI 40001 40021 40041 40081 400AI 4002* 400AI 400EI TPR: MONll. TEXT 3F'3C F'F'F'E 6100 OB04 2F'20 F'F'82 2F'20 F'F'AA 3F3C 0001 42A7 6100 E740 4E75 MOVE.W BSR GETXF'IB MOVE.L GETSTRB MOVE.L MOVE.W CLR.L BSR RTS # # , 2060 2248 4240 1018 OOCO 10F'C lOF'C 10F'C 10FC lOF'C SAl! 4[75 F'F'AA 002E 0054 0045 0058 0054 3F01 1020 FF87 6600 "''''** 4A57 67** 2060 1018 oeoo 6000 1018 oeoo 6600 2010 Oe80 - 157 F'F'AA 0005 **** 0045 *"'*'" 5845 432F' MONITOR TRYEXEC MOVE.W GETEBST MOVE.B BNE TST.W BEQ.S GETSTRB # MOVE.L MOVE.B CMP.B BLT MOVE.B CMP.B BNE MOVE.L CMP.L F'ILE: COMMAND. TEXT # 6600 "''''** 2060 7201 363C 6100 5343 66F8 36 6100 FFAA # 0005 007A @2 @4 F'F74 2060 FFFC 4A10 67** 6100 **** 6100 FF64 # 2060 FFFC 4A10 67** # FF'AA # 2060 7201 6100 6100 6100 0050 FF'70 FF4A 2060 FFFC 4AIO 67** 6100 **** 6100 FF3A # 2060 FF'FC 4A10 66** 10 2A 3A 6100 FEC6 4A57 66** oeoo 0025 66** # 06 1840 FF87 303C 0001 TRYEXEC @3 @6 # text file @f i Ie -i;TAS), -(A7) @title -86 A5~, -(A7) #1,- A7 -(A7 F'OPEN openold:=true junk open exec file APNOTXT -- appends APNOTXT GETSTRB # MOVE.L MOVE.L CLR.W MOVE.B AOO.W MOVE.B MOVE.B MOVE.B MOVE.B MOVE.B AOO.B RTS , #-2,-(A7) F'INIT -(A7 ) Page 095 . TEXT' to the code file name AO -86(A5),AO AO,A1 00 (AO )+,00 OO,AO #'.' , AO + #' T', AO + #'E' , AD + #' X', AO + #'T' , AO + #5,(Al) -- looks for EXEC/ in strbuf 01,-(A7) 00 -121(A5),00 already in an exec ? (ill (A7 ) @4 AO -86(A5),AO (AO )+,00 #5,00 @1 (AO )+, 00 #$45,00 @1 (AO),OO #$5845432F',00 BNE GETSTRB MOVE.L MOVE.L MOVE.W BSR SUB.W BNE.S @1 AO -86(A5),AO #1,01 #5,03 OELlCH #1,03 @2 BSR GETSYSC MOVE.L TST.B BEQ.S BSR BSR GETSYSC MOVE.L TST.B BEQ.S GETSTRB MOVE.L MOVE.L BSR BSR BSR GETSYSC MOVE.L TST.B BEQ.S BSR BSR GETSYSC .MOVE. L TST.B BNE.S OPNEXEC AO -4)A5),AO (AO @3 INSSTAR OPNEXEC AO -4)A5),AO (AO @3 AO -86(A5),AO #1,01 OELlCH APNOTXT OPNEXEC AO -4)A5).AO (AO @3 INSSTAR OPNEXEC AO -4( A5 ). AO (AO) @1 BSR TST.W BNE.S CMP.B BNE.S PUTEBST F'ROMEXEC (A7 ) ®6 #' %'. DO MOVE.B MOVE.W DO, -121(A5) #1,00 look for EXEC/ delete the EXEC/ go open it test iorslt go open it test iorslt test iorslt ~1 DO set ebstop to first char 28 Sap 82 40E21 60** 4008* OA 40CA* 18 4072* 0072 4066* 007E 405C* 0088 404A* 009A PAGE - 158 40E41 4240 40E2* 02 40E61 4A5F 40E81 4E75 40EAI 40EAI 40EAI 40EAI 40EAI 2F2D 40EEI 42A7 40FOI 3F3C 40F41 6100 40F81 40F81 2F20 40FCI 40FCI 2f"20 41001 3F3C 41041 42A7 41061 6100 410AI 4E-:75 410CI 410CI 410CI 410CI 410CI 2060 41101 2248 41121 4240 41141 1018 41161 OOCO 41181 lOFC 411CI lOFC 41201 10FC 41241 10FC 41281 5811 412AI 4E75 412CI 412CI 412CI 412CI 408E* 006E 4094* 0098 412CI 2060 41301 4240 41321 1018 41341 DOCO 41361 43E8 413AI 1320 413CI 5300 413EI 66FA 41401 133C 41441 41441 2060 41481 5210 414AI 4E75 414CI PAGE - 159 414CI 414CI 414CI 414CI 414CI 414CI 414CI 414CI 41501 41521 41541 41581 41581 41581 41581 415CI 41601 41621 41621 41661 4160* 416AI 416CI 416CI 416CI 416CI 416EI 41751 TPR: MON11. TEXT 8RA.S MONITOR @5 F'ILE: COMMAND. TEXT @1 MOVE.W #0,00 (55 TST.W RTS (A7 )+ discard 01 OPNCODE -- open code file , OPNCODE GETCFI8 MOVE.L -(A7~ -36 A5), -(A7) CLR.L -(A7 MOVE.W #-1, - (A7 ) 8SR F'INIT GETCFI8 # MOVE.L -(A7( -36 A5),-(A7) GETSTR8 -(A7 # MOVE.L -86 A5), -(A7) MOVE.W #1, - A7) CLR.L -(A7 8SR FOPEN RTS FFDC Cilf i Ie # FFFF DA16 FFOC FFAA 0001 E652 APND08J -- appends , FFAA # 002E 004F 0042 004A APND08J GETSTRB MOVE.L MOVE.L CLR.W MOVE.B ADD.W MOVE. 8 MOVE. 8 MOVE.B MOVE.B ADD. 8 RTS untyped file initialize codefib @fi Ie @title openold:=trua junk open coda file .OBJ' to the code file name AO -86(A5),AO AO,Al DO (AO )+, DO ~?'~O!AOl+ 0'; AO #' #' + AO #'J', AO #4, (Al ) 8', + + ; INSSTAR GETSTRB AO FFAA MOVE.L CLR.W MOVE. 8 ADD.W LEA MOVE.B SUB.B BNE.S MOVE.B GETSTR8 MOVE.L ADD.B RTS # 0001 002A FFAA # , MONITOR -86(A5),AO DO (AO )+, DO DO,AO l(AO), Al -(AO),-(Al) #1,00 ®1 #'*',-(Al) AO -86( AS ), AO #1, (AO ) FILE: COMMAND. TEXT LOADOBJ loads object file into buffer and verifies header first read code file into buffer the address of the buffer is propagated from here ; 2860 FF'AE 4287 4285 6100 F5C2 # LOADOBJ GETIBF' MOVE.L MOVE.L MOVE.L BSR A4 s~t -82(A5),A4 #0,07 #0,05 FILLBUF next block to read is 0 set INBYTE to zero go fill the buffer A4 to buffer start verify it is an executable file 6100 F60C OC40 008F 67** 2060 FFFC 108C OOOE 08 4E75 BSR CMP.W BEQ.S GETSYSC MOVE.L MOVE.B # ®1 NEXT. 1 #SSF, DO ®1 AO -4{ A5), AO #1 BADFMT, (AO ) RTS STRT08J ; OOOC 52. 75 6E 6E 69 6E 20 2E 2E 2E 20 67 RLPL RPL . WORD 12 . ASCII' Runn ing get first byte executable? set iorslt 28 Sep 82 417AI 417AI 417AI 417AI 4287 417CI 6100 41801 6100 41841 2240 41861 2049 41881 6100 418CI 2400 418EI 6100 41921 2F'00 41941 303C 41981 48CO 419AI 4480 419CI 0088 41AOI B440 41A21 6:~ "'* 41A41 7004 41A61 6000 41AAI 41AAI 41AAI 41A2* 06 41AAI 6100 41AEI 12CO 41BOI 5342 PAGE - 160 41B21 41B41 41B41 41B41 41B41 41B41 41B41 41B61 41B81 41BCI 41COI 41COI 41C41 41C81 41CAI 41CEI 41001 41041 41081 410CI 41EOI 41E41 41E81 41ECI 41EEI 41EEI 41F'21 41F'21 41F'61 41F'AI 41F'EI 42021 42041 42081 420AI 420CI 420EI 420EI 420EI 420EI 42121 42161 421AI 421EI 42221 42261 422AI 422AI 422EI 42301 42341 42381 423CI 423CI 42401 PAGE 42441 42441 42481 424AI 424CI 42501 42541 42561 TPR: MON11. 'TEXT , executab Ie file, get size, address, jump table size and commonsize STRTOBJ MOVE.L 8SR BSR MOVE.L MOVE.L BSR MOVE.L BSR MOVE.L MOVE.W EXT.L NEG.L ADD.L CMP.W BLS.S MOVE.L BRA F'5F'8 F'606 F'5F'E F'5F'8 1800 0138 F'654 #0,07 NEXT. 3 NEXT. 4 \ :." DO, A1 "1"~" Al, AO~ NEXT. 4, 00,02 NEXT. 4 ~ DO, -(A7) ) #UJMPTBL,DO DO DO S138,00 restore 07 (next block is still 0) get blocksize get address . save address as baseloc in AO get b~~~Ji get commonsize compute heapbase-jumptablestart DO,D~ user jump table too large? (i1 #4,00 ERROR copy the jump table into memory F'5BA MONITOR (il BSR MOVE.B SUB.W F'ILE: COMMAND. TEXT 61)F'6 BNE. S NEXT.l~ t+ copy next byte of jump table DO, -(Al #1,02 lIl1 startit up AO contains Baseloc (ie. SSTOP) 3410 EB4A 2270 2002 2:34C 0004 2460 2:34A 201F' 4869 4267 48E7 48E7 43F'A 343A 6100 6100 4COF' 2848 F'F'OC 0008 MOVE.W LSL. W MOVE.L MOVE.L GETCF'IB MOVE.L MOVE.L MOVE.L PEA MOVE.W MOVEM.L M~~EM' L (AO),D2 #5,02 2(AO,02.-W),Al A4. 4(Ai) A2 -36(AS),A2 A2, 8(Al ) (A7 )+, DO 20(Al) ; #O,-(A7) ; D3-D7/A2-A6,-(SP) DO/AO, - (A7 )1''' ; RPL, Al MOVE.W RLPL,D2 PRINT BSR 'SR WCRLF'J MOVEM.L (A7 )+, 07 lAO MOVE.L GETOF'IB MOVE.L -24 AS),-(A7) GETIF'IB -(A7 MOVE.L -20 AS), -(A7) LEA -8(SP),AS MOVE.L 2 AD ,AO JSR 4 AO ADD .L MOVEM.L (SP)+,D3-D7/A2-A6 TST.W (SP)+ ; ADDQ.L #4,SP RTS # 0014 IF'3E 8080 F'F'94 F'F'8E F'COC F'02A 0180 Q 2F20 F'F'E8 # 2F20 4BEF' 2068 4EA8 508F' 4COF' 4A5F' 588F' # F'FEC F'F'F'8 0002 0004 ~(A~4~ 7CF'8 4E~7S , 6100 6100 6100 6100 6100 6100 6100 F'A84 F'BA4 F'8C4 F'A78 F'A22 F'A48 F'C86 6100 101F' 6100 OCOO 6600 F'CA4 F'B34 0058 "'''''''''' 4220 F'F'A9 6100 F'CE8 - 161 MONITOR 2060 F'FF'C 4A10 66C2 323C 0001 6100 F'DF'O 4A40 66C2 *32 Al = address of SSFIRST-20 Move address of buffer to $SF'IRST-16 Move address of objfile to $SF'IRST-12 F'etch common size Push pointer to SSF'IRST Dummy push for Segment Bank Word Save Baseloc and Common Size PL address and length Restore Baseloc and Common Size (into 07) Setup A4 Jump Table Base Address +12(AS) (iOUTPUT +8( AS) (iINPUT = 16(AS) P-regs. Program Entry - 4 up!e registers Throwaway dummy Segment Bank Word Eliminate pointer to SSF'IRST Main prompt loop starts here RESTART BSR BSR BSR CMDLOOP BSR BSR BSR BSR CMDLOOP2 BSR MOVE.B BSR CMPI.B BNE DBUGCLR # MOVE.B BSR F'ILE: COMMAND. TEXT # 02 = number of segments GETSYSC MOVE.L TST.B BNE MOVE.W BSR TST.W BNE GETREGS HOMCRSR CLRSCR GETREGS RSTRXCP INITPRG PROMPT restore AS, SP and NP GETCHAR (A7)+,DO UPSHF'T #'X',DO TRYOBUG returns char on tos #0, -87(AS) XEQUTE AD -4(AS),AO (AD) RESTART #1,01 TRYEXEC DO CMDLOOP restore buf ptrs, AS, SP and NP X(ecute ? get file to execute test iorslt ins 1st on EXECI 28 Sep 82 42581 425CI 425CI 42601 42621 42641 42641 42681 426AI 426CI 42701 42741 42741 42781 427AI 427CI 427EI 427EI 42821 42861 428AJ 428EI 428EI 42921 42941 42961 429AI 429EI 429EI 42A21 42A41 42A61 42A81 42A81 42ACI 42BOI 42BOI 42B41 42B61 42B81 42BCI 42BEI 42C21 42C61 42C81 42CCI 42CCI PAGE 42001 42001 42041 42041 42081 420AI 42C6* 420EI 42A4* 4294* 427A* 4262* 42E21 42E61 42E61 42EAI 42ECI 42EEI 42F'21 423A* 42F61 42F'AI 42F'CI 42FCI 43021 43061 43061 430AI 430CI 43101 43141 43161 43181 42FA* 431AI 431EI 43201 43241 43281 432CI 43301 431E* 43341 43381 433AI 433CI TPR: MON1!. TEXT 6100 F'E90 2060 FFFC 4AI0 67** 2060 FFAA 4A10 6BA2 6100 FEBE 6100 FE78 2060 FFFC 4A10 67** 7201 2060 6100 6100 6100 FFAA OB76 FE84 FE5E 2060 FFFC 4A10 67** 6100 FE94 6100 FE4E 2060 FFFC 4AI0 67** 7201 2060 FFAA 6100 OB4C 2060 5910 4.241 6100 4A40 6600 4AB8 67** 2078 FFAA F088 FF5A 0154 0154 2F20 FFAA - 162 MONITOR TRYXEQT BSR GETSVSC # MOVE.L TST.B BEQ.S GETSTRB # MOVE.L TST.B BMI.S BSR BSR GETSVSC # MOVE.L TST.B BEQ.S MOVE.L GETSTRB # MOVE.L BSR BSR BSR GETSVSC # MOVE.L TST.B BEQ.S BSR BSR GETSVSC # MOVE.L TST.B BEQ.S MOVE.L GETSTRB # MOVE.L BSR GETSTRB # MOVE.L SUB.B CLR.W BSR TST.W BNE CALLLOR TST.L BEQ.S MOVE.L GETSTRB # MOVE.L FILE: COMMAND. TEXT OPNCOOE AO -4\A5),AO (AO FOPENOK AO -86(A5),AO (AO) RESTART INSSTAR OPNCOOE AO -4\A5),AO (AO FOPENOK #11.,01 AO -86(A5),AO OELlCH APNOOBJ OPNCOOE AO -4\ AS), AO (AO FOPENOK INSSTAR OPNCOOE AO -4)A5),AO (AO FOPENOK #1,01 AO -86(A5),AO OELlCH AO -86(A5).AO #4, (AO) 01 TRVEXEC DO CMOLOOP $154 NOLOAOR $1S4,AO -(A7 ( -86 AS). -(A7) GETOFIB MOVE.L GETIF'IB MOVE.L JSR BRA -(A7 -24 ~ AS). - (A7 ) @OUTPUT -(A7 -20 AS). -(A7) (AO) CMOLOOP @INPUT 2f'20 F'F'E8 # 2F'20 4E90 6000 16 6100 3C 4C 66 7E 6100 F'F'EC # 2060 4A10 6604 6100 6000 OOBC OCOO 66** FFFC F'F3E FAIC FE68 F'E8A F'F'26 0040 187C 0001 F'FA9 6100 FC26 2060 FFFC 4A10 6700 FF4A 41FA FEFC 2F08 40E7 4E40 lE oeoo 003F 66** 6100 F972 6100 F91C 6100 F942 6100 FB14 6000 FEF'8 14 OCOO 0041 66** 4267 60** Page 098 # NOLOAOR BSR IOCHK FOPENOK BSR GETSVSC MOVE.L TST.B BNE.S BSR BRA LOAOOBJ AO -4)AS),AO (AO TRVOBUG CMPI.B BNE.S . OBUGSET # MOVE.B BSR GETSVSC # MOVE.L TST.B BEQ LEA MOVE.L FAKEREO MOVE TRAP CALLLOR~ STRTOBJ CMOLOOP #'M', DO TRVQ #1, -87(AS) XEQUTE AO -4) AS ), AO ( AO TRVXEQT RESTART,AO AO,-~A7~ SR,- A7 #$0 TRVQ CMPI. B BNE.S BSR BSR BSR BSR BRA #'?', DO ACEFL GETREGS RSTRXCP INITPRG PROMPT2 CMOLOOP2 ACEF'L CMPI. B BNE.S MOVE.W BRA.S #' A', DO @1 #0*24, -(A7) SVSPROG open object file test iors 1t long string ? no, then append '.OBJ' try to open again test iorslt test iorslt delete .OBJ' don't !nsist on EXEC/ check to see if loader is in memory @title call the intrinsic unit loader load the object file test iorslt if ioresult<>O then start it tr~ iu loader Macsbug ? get file to debug file name present? yes, try to execute the file no, then fake red button A(ssemble ? 28 Sap 82 4338* 04 433EI oeoo 43421 66** 43441 3F'3C 43481 60** 4342* 06 434AI oeoo 434EI 66,** 43501 3F'3C PAGE - 163 43541 60** 434E* 06 43561 OCOO 435AI 66** 435CI 3F'3C 43601 60** 435A* OS 43621 OCOO 43661 66** 43681 3F3C 436CI 60** 4366* 06 436EI OCOO 43721 66** 43741 3F3C 43781 60** 4372* 06 437AI oeoo 437EI 66** 43801 3F3C 43841 60** 437E* 06 43861 OCOO 438AI 66** 438CI 3F3C 43901 60** 438A* 06 43921 OCOO 43961 6600 439AI 3F3C 439EI 4390* OC 4384* 18 4378* 24 436C* 30 4360* 3C 4354* 48 4348* 54 433C* 60 439EI 4220 43A21 6100 43A61 6100 43AAI 6100 43AEI 301F 43BOI 43BOI 2060 43B41 41F'0 43B81 2F08 43BAI 43BAI 43BAI 43BAI 43BAI 2260 43BEI 7006 43COI 2208 PAGE - 164 43C21 43C41 43C61 43C61 43CAI 43001 43021 43041 430S1 430S1 430AI 430EI 43E21 43ESI 43ESI 43EAI 43ECI 43EEI 4300* 43F21 43FSI 43FAI 44001 43FS* 44041 440AI TPR: MON11. TEXT 0043 @1 CMPI. B #' C', DO (12 BNE.S MOVE.W #1*24,-(A7) BRA.S SYSPROG (j)2 #'E',OO @3 #2*24, -(A7) 0018 0045 0030 MONITOR CMPI.B BNE.S MOVE.W FILE: COMMAND. TEXT 0046 0048 @4 004C 0060 0078 0055 OO~O 0047 00A8 E(dit ? BRA.S SYSPROG CMPI.B BNE.S MOVE.W BRA.S #'F', DO @l4 #3*24, -(A7) SY$PROG F( 11e ? CMPI.B BNE.S MOVE.W BRA.S #'L', DO @5 #4*24, - (A7 ) SYSPROG L( ink ? O(ebug ? CMPI. B BNE.S MOVE.W BRA.S #'U',OO @l7 #6*24, -(A7) SYSPROG U(csdeditor ? CMPI.B BNE.S MOVE.W BRA.S #'G', DO @8 #7*24, - (A7) SYSPROG G(enerate Code? CMPI.B #'S',OO BNE.S RESTART MOVE.W #8*24, -(A7) SYSPROG OBUGCLR (18 0053 FE7S OOCO F'F'A9 FA14 F'A34 F'B64 # FFB6 0000 # MOVE.B BSR BSR BSR MOVE.W GETSTBL MOVE.L LEA MOVE.L #0,-87(AS) HOMCRSR CLRSCR WCRLF (A7)+,OO AO -74(AS),AO O(AO,OO),AO AO,-(A7) S(ysmgr: ? ; @f i lename ; save it first try to find the system file on #4: FFAA MONITOR GETSTRB A1 MOVE.L -86(A5),A1 MOVE.L #6,00 @1 MOVE.L (AO)+,(A1)+ FILE: COMMAND. TEXT # 5340 66FA 2060 OC28 66** 2257 1019 1080 5418 10FC 10FC 10FC 4A19 1009 5300 66FA 6000 20 OC28 66** 117C 6000 OA OC28 66** C( omp i Ie ? CMPI. B #'0', DO (j)6 BNE.S MOVE.W #5*24, -(A7) BRA.S SYSPROG 0044 Page 099 F'F'AA 002A 0001 # 0023 0034 003A ®3 **** 003A 0003 0034 0002 **** 003A 0004 ®5 #1,00 @1 AO -8S(AS),AO #42, l(AO) @4 copy filename to strbuf SUB.W BNE.S GETSTRB MOVE.L CMPI. B BNE.S MOVE.L MOVE.B MOVE.B AOO.B MOVE.B MOVE.B MOVE.B TST.B MOVE.B SUB.S BNE.S BRA A1 (AO) ' DO DO, #2, AO)+ #35, (AD )+ #'4',(AO)+ #58, (AD )+ ~ A1 ~+ A1 +, (AO)+ #1,00 @3 FNOSYS2 CMPI.B BNE.S MOVE.S BRA #58, 3( AO ) @S #' 4' ,2(AO) FNOSYS2 if f i lename[3]=' :' then CMPI. B SNE.S #58, 4(AO) FNOSYS3 if filename[4]=':' then if filename[l]='*' then ~A7),A1 insert(' #4: ',f i lename, 1) sk ip over '*' and copy filename f i lename[2]: =' 4' 28 Sap 82 440CI 117C 44121 117C 4402* 0016 43FO* 0028 44181 6100 441CI 441CI 2060 44201 4AI0 44221 66** 44241 4A9F 44261 6000 4422* 06 440A* lE 442AI 2057 442CI 442CI 442CI 442CI 442CI 2260 44301 7006 44321 2208 44341 5340 44361 66FA 44381 6100 443CI 443CI 2060 44401 4A10 44421 66** 44441 4A9F" PAGE - 165 44461 6000 4442* 06 444AI 2057 444CI OC2S 44S21 66** 44541 44541 2260 44581 1019 445AI 1080 445CI 541S 445EI 10F"C 44621 10F"C 44661 10F"C 446AI 4A19 446CI 1009 446EI 5300 44701 66F"A 44721 2057 44741 60B6 4452* 22 44761 OC28 447CI 66** 447EI 117C 44841 60A6 447C* 08 44861 OC2S 448CI 66** 448EI 117C 44941 6096 448C* 08 44961 OC28 449CI 66** 449EI 449EI 2260 44A21 137C 44A81 1019 44AAI 1080 44ACI 5218 44AEI 1009 44BOI 1009 44B21 10FC 44B61 1009 44B81 5300 44BAI 66FA 44BCI 2057 44BEI 6000 449C* 24 44C21 oe28 44C81 66** 44CAI 117C 44001 6000 44C8* OA 44041 Oe28 440AI 66** 440Cl ll7C PAGE - 166 44E21 440A* 44E61 44E81 44EEI 44FOI TPR: MONll. TEXT 0030 0002 0034 0003 MOVE.B MOVE.B FCOO FFFC # FEBA FFAA F"CBO F"F"F"C MONITOR OPNCOOE AO -4\AS),AO (AO FNOSYS3 (A7 )+ FOPENOK FNOSYS3 MOVE.L (A7), AO @2 002A 0001 # 0023 0034 003A (1)3 @4 0034 0002 F"OPENDK MOVE.L CMPI. B BNE.S GETSTRB MOVE.L MOVE.B MOVE.B AOO.B MOVE.B MOVE.B MOVE.B TST.B MOVE.B SUB.B BNE.S MOVE.L BRA (A7), AO #42, l(AO) <114 Al -86(A5),A1 (Al (,DO 00, AO ~ #2, AO + #35, (AO)+ #'4',(AO)+ #58, (AO)+ ~ Al ~+ Al +, (AO)+ #1,00 @3 (A7),AO FINOSYS open object fila test iorslt, ok ? yes discard @fileneme if filename[l]='*' then insert(' #4: ' , filename, 1 ) sk ip over '",' end copy filename if filename[2]='S' then CMPI. B BNE.S GETSTRB MOVE.L MOVE.B MOVE.B MOVE.B AOO.B MOVE.B MOVE.B MOVE.B MOVE.B SUB.B BNE.S MOVE.L BRA #' 9' , 2(AO ) @8 Al -86(A5),Al #'1' ,2(Al) (AI )+,00 if filename[2]='9' then #1, AO + ~A1 +, AO)+ Al )+, AO)+ #' 0' , (AO)+ (Al )+, (AO)+ #1,00 ®7 (A7), AO FINOSYS CMPI.B BNE.S MOVE.B BRA #' 0' , 3(AO ) ®9 #' I' , 3( AO ) FINOSYS if filename[3]='O' then CMPI,B BNE.S MOVE.B FILE: COMMAND. TEXT #' l' , 3(AO ) ®10 #' 2' , 3(AO ) if @6 # 0030 ®7 FF6C ®8 0031 0003 FF5A 6000 FF48 OA 2057 Oe28 003A 0001 67** 7201 BRA copy filename to strbuf #' 5' , 2(AO ) ®6 #' 9', 2(AO) FINOSYS 0039 0002 0032 0003 MONITOR Al -86(AS),Al #6,00 (AO)+,(A1)+ #1,00 @1 OPNCODE AO -4\ AS), AO ( AO @2 (A7 )+ CMPI.B BNE.S MOVE.B BRA @5 0039 0002 0031 0003 test iors It, ok ? yes discard @filename if filename[2]='4' then 0035 0002 0030 0003 open object file CMPI. B #'4',2(AO) BNE.S @5 MOVE.B #' 5', 2(AO) BRA FINOSYS 0035 0002 F"FAA 0031 0002 filenamef2~:='O' filename 3 : =' 4' enter here with @filename in AO and a copy on tos FINOSYS GETSTRB # MOVE.L MOVE.L @1 MOVE.L SUB.W BNE.S BSR GETSYSC # MOVE.L TST.B BNE.S TST.L FILE: COMMAND. TEXT F"E9A FF"AA #' 0' , 2~AO ~ #'4',3 AO FNOSYS2 BSR GETSYSC MOVE.L TST.B BNE.S TST.L BRA ; ; Page 100 ®9 @l10 filename[2]:='S' filename[2]:='9' f i lename[2]: ='1' DOf{ BRA FINOSYS MOVE.L CMPI. B BEQ.S MOVE.L (A7),AO #58,1(AO) ®ll #1,01 insert('O',filename,3) f i lename[3]: ='1' filename(3]='1' then filename[2]:='2' wh i Ie f ilename[ 1 ]<>' : ' do J 28 Sep 82 TPR: MON11. TEXT 44F21 6100 0906 44F61 60EE 44EE* 08 44F81 117C 002A 0001 44FEI 4A9F 45001 487 A FOOC 45041 6000 F7F6 45081 45081 45081 45081 301F 450AI 4A9F 450CI 0800 0000 45101 66** 45121 508F 45141 4E68 45161 3E98 45181 21="58 0002 451CI 4E60 4510* DC 451EI 4A38 014C 45221 67l1
Source Exif Data:File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.3 Linearized : No XMP Toolkit : Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:56:37 Create Date : 2011:07:08 18:32:10-08:00 Modify Date : 2011:07:08 18:36:59-07:00 Metadata Date : 2011:07:08 18:36:59-07:00 Producer : Adobe Acrobat 9.45 Paper Capture Plug-in Format : application/pdf Document ID : uuid:07d7df7c-b517-415c-9a42-7b04ed6e93ed Instance ID : uuid:991a4fe7-5ace-4607-a4f1-c4b48efaf257 Page Layout : SinglePage Page Mode : UseOutlines Page Count : 104EXIF Metadata provided by EXIF.tools