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 PDF.
Page Count: 104

DownloadMonitor_11_Listing_Sep82 Monitor 11 Listing Sep82
Open PDF In BrowserView 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 (indexmaxindx) 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 fsegsO}
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 dupinxvolsesrch( 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 (dlstblkO 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 ( iO 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 fnxtblkO 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                      : 104
EXIF Metadata provided by EXIF.tools

Navigation menu