Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
TITLE 'ASM COMMON DATA AREA'
;
; COPYRIGHT (C) 1977, 1978, 1979, 1980
; DIGITAL RESEARCH
; BOX 579, PACIFIC GROVE
; CALIFORNIA, 93950
;
; Revised:
; 20 Jan 80 by Thomas Rolander
;
; COMMON DATA FOR MP/M ASSEMBLER MODULE
org 0
base equ $
ORG 100H
ENDA EQU base+20F0H ;END OF ASSEMBLER PROGRAM
BDOS EQU base+5H ;ENTRY TO DOS, USED TO COMPUTE END MEMORY
LXI SP,ENDMOD
LHLD BDOS+1
SHLD SYMAX ;COMPUTE END OF MEMORY
JMP ENDMOD
COPY: DB ' COPYRIGHT(C) 1980, DIGITAL RESEARCH '
org 10ch
;
; PRINT BUFFER AND PRINT BUFFER POINTER
PBMAX EQU 90 ;MAX PRINT BUFFER
PBUFF: DS PBMAX
PBP: DS 1 ;PRINT BUFFER POINTER
;
; SCANNER PARAMETERS
TOKEN: DS 1 ;CURRENT TOKEN
VALUE: DS 2 ;BINARY VALUE FOR NUMBERS
ACCLEN: DS 1 ;ACCUMULATOR LENGTH
ACMAX EQU 64 ;LENGTH OF ACCUMULATOR
ACCUM: DS ACMAX ;ACCUMULATOR (MUST FOLLLOW ACCLEN)
;
; OPERAND EXPRESSION EVALUATOR PARAMETERS
EVALUE: DS 2 ;VALUE OF EXPRESSION AFTER EVALUATION
;
; SYMBOL TABLE MODULE PARAMETERS
SYTOP: DW ENDA ;FIRST LOCATION AVAILABLE FOR SYMBOL TABLE
SYMAX: DS 2 ;LAST AVAILABLE LOCATION FOR SYMBOL TABLE
;
; MISCELLANEOUS DATA AREAS
PASS: DS 1 ;PASS # 0,1
FPC: DS 2 ;FILL ADDRESS FOR NEXT HEX RECORD
ASPC: DS 2 ;ASSEMBLER'S PSEUDO PC
SYBAS: DW ENDA ;SYMBOL TABLE BASE
SYADR: DS 2 ;CURRENT SYMBOL BASE
ENDMOD EQU ($ AND 0FF00H)+100H
END


View File

@@ -0,0 +1,730 @@
TITLE 'ASM IO MODULE'
; I/O MODULE FOR MP/M ASSEMBLER
;
org 0
base equ $
ORG 200H
BOOT EQU base+00H ;REBOOT LOCATION
; I/O MODULE ENTRY POINTS
JMP INIT ;INITIALIZE, START ASSEMBLER
JMP SETUP ;FILE SETUP
JMP GNC ;GET NEXT CHARACTER
JMP PNC ;PUT NEXT OUTPUT CHARACTER
JMP PNB ;PUT NEXT HEX BYTE
JMP PCHAR ;PRINT CONSOLE CHARACTER
JMP PCON ;PRINT CONSOLE BUFFER TO CRLF
JMP WOBUFF ;WRITE OUTBUFFER
JMP PERR ;PLACE ERROR CHARACTER INTO PBUFF
JMP DHEX ;PLACE HEX BYTE INTO OUTPUT BUFFER
JMP EOR ;END OF ASSEMBLY
; DATA FOR I/O MODULE
BPC: DS 2 ;BASE PC FOR CURRENT HEX RECORD
DBL: DS 1 ;HEX BUFFER LENGTH
DBUFF: DS 16 ;HEX BUFFER
;
; DISK NAMES
CDISK: DS 1 ;CURRENTLY SELECTED DISK
ADISK: DS 1 ;.ASM DISK
PDISK: DS 1 ;.PRN DISK
HDISK: DS 1 ;.HEX DISK
;
;
;
; COMMON EQUATES
QBMAX EQU 90 ;MAX PRINT SIZE
QBUFF EQU base+10CH ;PRINT BUFFER
QBP EQU QBUFF+QBMAX ;PRINT BUFFER POINTER
;
TOKEN EQU QBP+1 ;CURRENT TOKEN UDER SCAN
VALUE EQU TOKEN+1 ;VALUE OF NUMBER IN BINARY
ACCLEN EQU VALUE+2 ;ACCUMULATOR LENGTH
ACMAX EQU 64 ;MAX ACCUMULATOR LENGTH
ACCUM EQU ACCLEN+1
;
EVALUE EQU ACCUM+ACMAX ;VALUE FROM EXPRESSION ANALYSIS
;
SYTOP EQU EVALUE+2 ;CURRENT SYMBOL TOP
SYMAX EQU SYTOP+2 ;MAX ADDRESS+1
;
PASS EQU SYMAX+2 ;CURRENT PASS NUMBER
FPC EQU PASS+1 ;FILL ADDRESS FOR DHEX ROUTINE
ASPC EQU FPC+2 ;ASSEMBLER'S PSEUDO PC
;
CR EQU 0DH ;CARRIAGE RETURN
LF EQU 0AH ;LINE FEED
EOF EQU 1AH ;END OF FILE MARK
;
;
; DOS ENTRY POINTS
BDOS EQU base+5H ;DOS ENTRY POINT
READC EQU 1 ;READ CONSOLE DEVICE
WRITC EQU 2 ;WRITE CONSOLE DEVICE
REDYC EQU 11 ;CONSOLE CHARACTER READY
SELECT EQU 14 ;SELECT DISK SPECIFIED BY REGISTER E
OPENF EQU 15 ;OPEN FILE
CLOSF EQU 16 ;CLOSE FILE
DELEF EQU 19 ;DELETE FILE
READF EQU 20 ;READ FILE
WRITF EQU 21 ;WRITE FILE
MAKEF EQU 22 ;MAKE A FILE
CSEL EQU 25 ;RETURN CURRENTLY SELECTED DISK
SETDM EQU 26 ;SET DMA ADDRESS
;
; FILE AND BUFFERING PARAMETERS
NSB EQU 8 ;NUMBER OF SOURCE BUFFERS
NPB EQU 6 ;NUMBER OF PRINT BUFFERS
NHB EQU 6 ;NUMBER OF HEX BUFFERS
;
SSIZE EQU NSB*128
PSIZE EQU NPB*128
HSIZE EQU NHB*128
;
; FILE CONTROL BLOCKS
SCB: DS 9 ;FILE NAME
DB 'ASM' ;FILE TYPE
SCBR: DS 1 ;REEL NUMBER (ZEROED IN SETUP)
DS 19 ;MISC AND DISK MAP
SCBCR: DS 1 ;CURRENT RECORD (ZEROED IN SETUP)
;
PCB: DS 9
DB 'PRN',0
DS 19
DB 0 ;RECORD TO WRITE NEXT
;
HCB: DS 9
DB 'HEX',0
DS 19
DB 0
;
; POINTERS AND BUFFERS
SBP: DW SSIZE ;NEXT CHARACTER POSITION TO READ
SBUFF: DS SSIZE
;
PBP: DW 0
PBUFF: DS PSIZE
;
HBP: DW 0
HBUFF: DS HSIZE
FCB EQU base+5CH ;FILE CONTROL BLOCK ADDRESS
FNM EQU 1 ;POSITION OF FILE NAME
FLN EQU 9 ;FILE NAME LENGTH
BUFF EQU base+80H ;INPUT DISK BUFFER ADDRESS
;
SEL: ;SELECT DISK IN REG-A
LXI H,CDISK
CMP M ;SAME?
RZ
MOV M,A ;CHANGE CURRENT DISK
MOV E,A
MVI C,SELECT
CALL BDOS
RET
;
SCNP: ;SCAN THE NEXT PARAMETER
INX H
MOV A,M
CPI ' '
JZ SCNP0
SBI 'A' ;NORMALIZE
RET
SCNP0: LDA CDISK
RET
;
PCON: ;PRINT MESSAGE AT H,L TO CONSOLE DEVICE
MOV A,M
CALL PCHAR
MOV A,M
INX H
CPI CR
JNZ PCON
MVI A,LF
CALL PCHAR
RET
;
FNAME: ;FILL NAME FROM DEFAULT FILE CONTROL BLOCK
LXI D,FCB
MVI B,FLN
FNAM0: LDAX D ;GET NEXT FILE CHARACTER
CPI '?'
JZ FNERR ;FILE NAME ERROR
MOV M,A ;STORE TO FILE CNTRL BLOCK
INX H
INX D
DCR B
JNZ FNAM0 ;FOR NEXT CHARACTER
RET
;
INIT: ;SET UP STACK AND FILES, START ASSEMBLER
LXI H,TITL
CALL PCON
JMP SET0
;
OPEN: ;OPEN FILE ADDRESSED BY D,E
MVI C,OPENF
CALL BDOS
CPI 255
RNZ
; OPEN ERROR
LXI H,ERROP
CALL PCON
JMP BOOT
;
CLOSE: ;CLOSE FILE ADDRESSED BY D,E
MVI C,CLOSF
CALL BDOS
CPI 255
RNZ ;CLOSE OK
LXI H,ERRCL
CALL PCON
JMP BOOT
;
DELETE: ;DELETE FILE ADDRESSED BY D,E
MVI C,DELEF
JMP BDOS
;
MAKE: ;MAKE FILE ADDRESSED BY D,E
MVI C,MAKEF
CALL BDOS
CPI 255
RNZ
; MAKE ERROR
LXI H,ERRMA
CALL PCON
JMP BOOT
;
SELA: LDA ADISK
CALL SEL
RET
;
NPR: ;RETURN ZERO FLAG IF NO PRINT FILE
LDA PDISK
CPI 'Z'-'A'
RZ
CPI 'X'-'A' ;CONSOLE
RET
;
SELP: LDA PDISK
CALL SEL
RET
;
SELH: LDA HDISK
CALL SEL
RET
;
SET0: ;SET UP FILES FOR INPUT AND OUTPUT
LDA FCB ;GET FIRST CHARACTER
CPI ' ' ;MAY HAVE FORGOTTEN NAME
JZ FNERR ;FILE NAME ERROR
MVI C,CSEL ;CURRENT DISK?
CALL BDOS ;GET IT TO REG-A
STA CDISK
;
; SCAN PARAMETERS
LXI H,FCB+FLN-1
CALL SCNP
STA ADISK
CALL SCNP
STA HDISK
CALL SCNP
STA PDISK
;
LXI H,SCB ;ADDRESS SOURCE FILE CONTROL BLOCK
CALL FNAME ;FILE NAME OBTAINED FROM DEFAULT FCB
;
CALL NPR ;Z OR X?
JZ NOPR
LXI H,PCB ;ADDRESS PRINT FILE CONTROL BLOCK
PUSH H ;SAVE A COPY FOR OPEN
PUSH H ;SAVE A COPY FOR DELETE
CALL FNAME ;FILL PCB
CALL SELP
POP D ;FCB ADDRESS
CALL DELETE
POP D ;FCB ADDRESS
CALL MAKE
;
NOPR: ;TEST FOR HEX FILE
LDA HDISK
CPI 'Z'-'A'
JZ NOHEX
LXI H,HCB
PUSH H
PUSH H
CALL FNAME
CALL SELH
POP D
CALL DELETE
POP D
CALL MAKE
;
; FILES SET UP, CALL ASSEMBLER
NOHEX: JMP ENDMOD
;
SETUP: ;SETUP INPUT FILE FOR SOURCE PROGRAM
LXI H,SSIZE
SHLD SBP ;CAUSE IMMEDIATE READ
XRA A ;ZERO VALUE
STA SCBR ;CLEAR REEL NUMBER
STA SCBCR ;CLEAR CURRENT RECORD
STA DBL ;CLEAR HEX BUFFER LENGTH
CALL SELA
LXI D,SCB
CALL OPEN
;
RET
;
FNERR: ;FILE NAME ERROR
LXI H,ERRFN
CALL PCON
JMP BOOT
;
;
GCOMP: ;COMPARE D,E AGAINS H,L
MOV A,D
CMP H
RNZ
MOV A,E
CMP L
RET
;
GNC: ;GET NEXT CHARACTER FROM SOURCE BUFFER
PUSH B
PUSH D
PUSH H ;ENVIRONMENT SAVED
LHLD SBP
LXI D,SSIZE
CALL GCOMP
JNZ GNC2
;
; READ ANOTHER BUFFER
CALL SELA
LXI H,0
SHLD SBP
MVI B,NSB ;NUMBER OF SOURCE BUFFERS
LXI H,SBUFF
GNC0: ;READ 128 BYTES
PUSH B ;SAVE COUNT
PUSH H ;SAVE BUFFER ADDRESS
MVI C,READF
LXI D,SCB
CALL BDOS ;PERFORM THE READ
POP H ;RESTORE BUFFER ADDRESS
POP B ;RESTORE BUFFER COUNT
ORA A ;SET FLAGS
MVI C,128
JNZ GNC1
; NORMAL READ OCCURRED
LXI D,BUFF ;SOURCE BUFFER ADDRESS
MVI C,128
MOV0: LDAX D ;GET CHARACTER
MOV M,A ;STORE CHARACTER
INX D
INX H
DCR C
JNZ MOV0
; BUFFER LOADED, TRY NEXT BUFFER
;
DCR B
JNZ GNC0
JMP GNC2
;
GNC1: ;EOF OR ERROR
CPI 3 ;ALLOW 0,1,2
JNC FRERR ;FILE READ ERROR
GNCE: MVI M,EOF ;STORE AND END OF FILE CHARACTER
INX H
DCR C
JNZ GNCE ;FILL CURRENT BUFFER WITH EOF'S
;
GNC2: ;GET CHARACTER TO ACCUMULATOR AND RETURN
LXI D,SBUFF
LHLD SBP
PUSH H ;SAVE CURRENT SBP
INX H ;READY FOR NEXT READ
SHLD SBP
POP H ;RESTORE PREVIOUS SBP
DAD D ;ABSOLUTE ADDRESS OF CHARACTER
MOV A,M ;GET IT
POP H
POP D
POP B
RET
;
FRERR: LXI H,ERRFR
CALL PCON ;PRINT READ ERROR MESSAGE
JMP BOOT
;
PNC: ;SAME AT PNCF, BUT ENVIRONMENT IS SAVED FIRST
PUSH B
; CHECK FOR CONSOLE OUTPUT / NO OUTPUT
MOV B,A ;SAVE CHARACTER
LDA PDISK ;Z OR X?
CPI 'Z'-'A' ;Z NO OUTPUT
JZ PNRET
;
CPI 'X'-'A'
MOV A,B ;RECOVER CHAR FOR CON OUT
JNZ PNGO
CALL PCHAR
JMP PNRET
;
; NOT X OR Z, SO PRINT IT
PNGO: PUSH D
PUSH H
CALL PNCF
POP H
POP D
PNRET: POP B
RET
;
PNCF: ;PRINT NEXT CHARACTER
LHLD PBP
XCHG
LXI H,PBUFF
DAD D
MOV M,A ;CHARACTER STORED AT PBP IN PBUFF
XCHG ;PBP TO H,L
INX H ;POINT TO NEXT CHARACTER
SHLD PBP ;REPLACE IT
XCHG
LXI H,PSIZE
CALL GCOMP ;AT END OF BUFFER?
RNZ ;RETURN IF NOT
;
; OVERFLOW, WRITE BUFFER
CALL SELP
LXI H,0
SHLD PBP
LXI H,PBUFF
LXI D,PCB ;D,E ADDRESS FILE CONTROL BLOCK
MVI B,NPB ;NUMBER OF BUFFERS TO B
; (DROP THROUGH TO WBUFF)
;
WBUFF: ;WRITE BUFFERS STARTING AT H,L FOR B BUFFERS
; CHECK FOR EOF'S
MOV A,M
CPI EOF
RZ ;DON'T DO THE WRITE
;
PUSH B ;SAVE NUMBER OF BUFFERS
PUSH D ;SAVE FCB ADDRESS
MVI C,128 ;READY FOR MOVE
LXI D,BUFF
WBUF0: ;MOVE TO BUFFER
MOV A,M ;GET CHARACTER
STAX D ;PUT CHARACTER
INX H
INX D
DCR C
JNZ WBUF0
;
; WRITE BUFFER
POP D ;RECOVER FCB ADDRESS
PUSH D ;SAVE IT AGAIN FOR LATER
PUSH H ;SAVE BUFFER ADDRESS
MVI C,WRITF ;DOS WRITE FUNCTION
CALL BDOS
POP H ;RECOVER BUFFER ADDRESS
POP D ;RECOVER FCB ADDRESS
POP B ;RECOVER BUFFER COUNT
ORA A ;SET ERROR RETURN FLAGS
JNZ FWERR
;
; WRITE OK
DCR B
RZ ;RETURN IF NO MORE BUFFERS TO WRITE
JMP WBUFF
;
FWERR: ;ERROR IN WRITE
LXI H,ERRFW
CALL PCON ;ERROR MESSAGE OUT
JMP EORC ;TO CLOSE AND REBOOT
;
;
PNB: ;PUT NEXT HEX BYTE
PUSH B
PUSH D
PUSH H
CALL PNBF
POP H
POP D
POP B
RET
;
PNBF: ;PUT NEXT BYTE
; (SIMILAR TO THE PNCF SUBROUTINE)
LHLD HBP
XCHG
LXI H,HBUFF
DAD D
MOV M,A ;CHARACTER STORED AT HBP IN HBUFF
XCHG
INX H ;HBP INCREMENTED
SHLD HBP
XCHG ;BACK TO D,E
LXI H,HSIZE
CALL GCOMP ;EQUAL?
RNZ
;
; OVERFLOW, WRITE BUFFERS
CALL SELH
LXI H,0
SHLD HBP
LXI H,HBUFF
LXI D,HCB ;FILE CONTROL BLOCK FOR HEX FILE
MVI B,NHB
JMP WBUFF ;WRITE BUFFERS
;
PCHAR: ;PRINT CHARACTER IN REGISTER A
PUSH B
PUSH D
PUSH H
MVI C,WRITC
MOV E,A
CALL BDOS
POP H
POP D
POP B
RET
;
WOCHAR: ;WRITE CHARACTER IN REG-A WITH REFLECT AT CONSOLE IF ERROR
MOV C,A ;SAVE THE CHAR
CALL PNC ;PRINT CHAR
LDA QBUFF
CPI ' '
RZ
; ERROR IN LINE
LDA PDISK
CPI 'X'-'A'
RZ ;ALREADY PRINTED IF 'X'
;
MOV A,C ;RECOVER CHARACTER
CALL PCHAR ;PRINT IT
RET
;
WOBUFF: ;WRITE THE OUTPUT BUFFER TO THE PRINT FILE
LDA QBP ;GET CHARACTER COUNT
LXI H,QBUFF ;BASE OF BUFFER
WOB0: ORA A ;ZERO COUNT?
JZ WOBE
; NOT END, SAVE COUNT AND GET CHARACTER
MOV B,A ;SAVE COUNT
MOV A,M
CALL WOCHAR ;WRITE CHARACTER
INX H ;ADDRESS NEXT CHARACTER OF BUFFER
MOV A,B ;GET COUNT
DCR A
JMP WOB0
;
WOBE: ;END OF PRINT - ZERO QBP
STA QBP
; FOLLOW BY CR LF
MVI A,CR
CALL WOCHAR
MVI A,LF
CALL WOCHAR
LXI H,QBUFF
MVI A,QBMAX ;READY TO BLANK OUT
WOB2: MVI M,' '
INX H
DCR A
JNZ WOB2
RET
;
;
PERR: ;FILL QBUFF ERROR MESSAGE POSITION
MOV B,A ;SAVE CHARACTER
LXI H,QBUFF
MOV A,M
CPI ' '
RNZ ;DON'T CHANGE IT IF ALREADY SET
MOV M,B ;STORE ERROR CHARACTER
RET
;
EOR: ;END OF ASSEMBLER
CALL NPR ;Z OR A?
JZ EOPR
; FILL OUTPUT FILES WITH EOF'S
EOR2: LHLD PBP
MOV A,L
ORA H ;VALUE ZERO?
JZ EOPR
MVI A,EOF ;CTL-Z IS END OF FILE
CALL PNC ;PUT ENDFILES IN PRINT BUFFER
JMP EOR2 ;EVENTUALLY BUFFER IS WRITTEN
;
EOPR: ;END OF PRINT FILE, CHECK HEX
LDA HDISK
CPI 'Z'-'A'
JZ EORC
EOR0: ;WRITE TERMINATING RECORD INTO HEX FILE
LDA DBL ;MAY BE ZERO ALREADY
ORA A
CNZ WHEX ;WRITE HEX BUFFER IF NOT ZERO
LHLD FPC ;GET CURRENT FPC AS LAST ADDRESS
SHLD BPC ;RECORD LENGTH ZERO, BASE ADDRESS 0000
CALL WHEX ;WRITE HEX BUFFER
;
; NOW CLEAR OUTPUT BUFFER FOR HEX FILE
EOR1: LHLD HBP
MOV A,L
ORA H
JZ EORC
MVI A,EOF
CALL PNB
JMP EOR1
;
; CLOSE FILES AND TERMINATE
EORC:
CALL NPR
JZ EORPC
CALL SELP
LXI D,PCB
CALL CLOSE
EORPC:
LDA HDISK
CPI 'Z'-'A'
JZ EORHC
CALL SELH
LXI D,HCB
CALL CLOSE
;
EORHC:
LXI H,ENDA
CALL PCON
JMP BOOT
;
TITL: DB 'MP/M ASSEMBLER - VER 1.1',CR
ERROP: DB 'NO SOURCE FILE PRESENT',CR
ERRMA: DB 'NO DIRECTORY SPACE',CR
ERRFN: DB 'SOURCE FILE NAME ERROR',CR
ERRFR: DB 'SOURCE FILE READ ERROR',CR
ERRFW: DB 'OUTPUT FILE WRITE ERROR',CR
ERRCL: DB 'CANNOT CLOSE FILES',CR
ENDA: DB 'END OF ASSEMBLY',CR
;
DHEX: ;DATA TO HEX BUFFER (BYTE IN REG-A)
PUSH B
MOV B,A ;HOLD CHARACTER FOR 'Z' TEST
LDA HDISK
CPI 'Z'-'A'
MOV A,B ;RECOVER CHARACTER
JZ DHRET
PUSH D ;ENVIRONMENT SAVED
PUSH PSW ;SAVE DATA BYTE
LXI H,DBL ;CURRENT LENGTH
MOV A,M ;TO ACCUM
ORA A ;ZERO?
JZ DHEX3
;
; LENGTH NOT ZERO, MAY BE FULL BUFFER
CPI 16
JC DHEX1 ;BR IF LESS THAN 16 BYTES
; BUFFER FULL, DUMP IT
CALL WHEX ;DBL = 0 UPON RETURN
JMP DHEX3 ;SET BPC AND DATA BYTE
;
DHEX1: ;PARTIAL BUFFER IN PROGRESS, CHECK FOR SEQUENTIAL BYTE LOAD
LHLD FPC
XCHG
LHLD BPC ;BASE PC IN H,L
MOV C,A ;CURRENT LENGTH OF BUFFER
MVI B,0 ;IS IN B,C
DAD B ;BPC+DBL TO H,L
MOV A,E ;READY FOR COMPARE
CMP L ;EQUAL?
JNZ DHEX2 ;BR IF NOT
MOV A,D ;CHECK HO BYTE
CMP H
JZ DHEX4 ;BR IF SAME ADDRESS
;
DHEX2: ;NON SEQUENTIAL ADDRESS, DUMP AND CHANGE BASE ADDRESS
CALL WHEX
DHEX3: ;SET NEW BASE
LHLD FPC
SHLD BPC
;
DHEX4: ;STORE DATA BYTE AND INC DBL
LXI H,DBL
MOV E,M ;LENGTH TO REG-E
INR M ;DBL=DBL+1
MVI D,0 ;HIGH ORDER ZERO FOR DOUBLE ADD
LXI H,DBUFF
DAD D ;DBUFF+DBL TO H,L
POP PSW ;RESTORE DATA BYTE
MOV M,A ;INTO DATA BUFFER
POP D
DHRET: POP B ;ENVIRONMENT RESTORED
RET
;
WRC: ;WRITE CHARACTER WITH CHECK SUM IN D
PUSH PSW
RRC
RRC
RRC
RRC
ANI 0FH
CALL HEXC ;OUTPUT HEX CHARACTER
POP PSW ;RESTORE BYTE
PUSH PSW ;SAVE A VERSION
ANI 0FH
CALL HEXC ;WRITE LOW NIBBLE
POP PSW ;RESTORE BYTE
ADD D ;COMPUTE CHECKSUM
MOV D,A ;SAVE CS
RET
;
HEXC: ;WRITE CHARACTER
ADI 90H
DAA
ACI 40H
DAA
JMP PNB ;PUT BYTE
;
WHEX: ;WRITE CURRENT HEX BUFFER
MVI A,':' ;RECORD HEADER
CALL PNB ;PUT BYTE
LXI H,DBL ;RECORD LENGTH ADDRESS
MOV E,M ;LENGTH TO REG-E
XRA A ;ZERO TO REG-A
MOV D,A ;CLEAR CHECKSUM
MOV M,A ;LENGTH IS ZEROED FOR NEXT WRITE
LHLD BPC ;BASE ADDRESS FOR RECORD
MOV A,E ;LENGTH TO A
CALL WRC ;WRITE HEX VALUE
MOV A,H ;HIGH ORDER BASE ADDR
CALL WRC ;WRITE HO BYTE
MOV A,L ;LOW ORDER BASE ADDR
CALL WRC ;WRITE LO BYTE
XRA A ;ZERO TO A
CALL WRC ;WRITE RECORD TYPE 00
MOV A,E ;CHECK FOR LENGTH 0
ORA A
JZ WHEX1
;
; NON - ZERO, WRITE DATA BYTES
LXI H,DBUFF
WHEX0: MOV A,M ;GET BYTE
INX H
CALL WRC ;WRITE DATA BYTE
DCR E ;END OF BUFFER?
JNZ WHEX0
;
; END OF DATA BYTES, WRITE CHECK SUM
WHEX1: XRA A
SUB D ;COMPUTE CHECKSUM
CALL WRC
;
; SEND CRLF AT END OF RECORD
MVI A,CR
CALL PNB
MVI A,LF
CALL PNB
RET
;
;
;
ENDMOD EQU ($ AND 0FFE0H)+20H
END


View File

@@ -0,0 +1,408 @@
TITLE 'ASM SCANNER MODULE'
org 0
base equ $
ORG 1100H
JMP ENDMOD ;END OF THIS MODULE
JMP INITS ;INITIALIZE THE SCANNER
JMP SCAN ;CALL THE SCANNER
;
;
; ENTRY POINTS IN I/O MODULE
IOMOD EQU base+200H
GNCF EQU IOMOD+6H
WOBUFF EQU IOMOD+15H
PERR EQU IOMOD+18H
;
LASTC: DS 1 ;LAST CHAR SCANNED
NEXTC: DS 1 ;LOOK AHEAD CHAR
STYPE: DS 1 ;RADIX INDICATOR
;
; COMMON EQUATES
PBMAX EQU 90 ;MAX PRINT SIZE
PBUFF EQU base+10CH ;PRINT BUFFER
PBP EQU PBUFF+PBMAX ;PRINT BUFFER POINTER
;
TOKEN EQU PBP+1 ;CURRENT TOKEN UDER SCAN
VALUE EQU TOKEN+1 ;VALUE OF NUMBER IN BINARY
ACCLEN EQU VALUE+2 ;ACCUMULATOR LENGTH
ACMAX EQU 64 ;MAX ACCUMULATOR LENGTH
ACCUM EQU ACCLEN+1
;
EVALUE EQU ACCUM+ACMAX ;VALUE FROM EXPRESSION ANALYSIS
;
SYTOP EQU EVALUE+2 ;CURRENT SYMBOL TOP
SYMAX EQU SYTOP+2 ;MAX ADDRESS+1
;
PASS EQU SYMAX+2 ;CURRENT PASS NUMBER
FPC EQU PASS+1 ;FILL ADDRESS FOR NEXT HEX BYTE
ASPC EQU FPC+2 ;ASSEMBLER'S PSEUDO PC
;
; GLOBAL EQUATES
IDEN EQU 1 ;IDENTIFIER
NUMB EQU 2 ;NUMBER
STRNG EQU 3 ;STRING
SPECL EQU 4 ;SPECIAL CHARACTER
;
PLABT EQU 0001B ;PROGRAM LABEL
DLABT EQU 0010B ;DATA LABEL
EQUT EQU 0100B ;EQUATE
SETT EQU 0101B ;SET
MACT EQU 0110B ;MACRO
;
EXTT EQU 1000B ;EXTERNAL
REFT EQU 1011B ;REFER
GLBT EQU 1100B ;GLOBAL
;
BINV EQU 2
OCTV EQU 8
DECV EQU 10
HEXV EQU 16
CR EQU 0DH
LF EQU 0AH
EOF EQU 1AH
TAB EQU 09H ;TAB CHARACTER
;
;
; UTILITY SUBROUTINES
GNC: ;GET NEXT CHARACTER AND ECHO TO PRINT FILE
CALL GNCF
PUSH PSW
CPI CR
JZ GNC0
CPI LF ;IF LF THEN DUMP CURRENT BUFFER
JZ GNC0
;
;NOT A CR OR LF, PLACE INTO BUFFER IF THERE IS ENOUGH ROOM
LDA PBP
CPI PBMAX
JNC GNC0
; ENOUGH ROOM, PLACE INTO BUFFER
MOV E,A
MVI D,0 ;DOUBLE PRECISION PBP IN D,E
INR A
STA PBP ;INCREMENTED PBP IN MEMORY
LXI H,PBUFF
DAD D ;PBUFF(PBP)
POP PSW
MOV M,A ;PBUFF(PBP) = CHAR
RET
GNC0: ;CHAR NOT PLACED INTO BUFFER
POP PSW
RET
;
INITS: ;INITIALIZE THE SCANNER
CALL ZERO
STA NEXTC ;CLEAR NEXT CHARACTER
STA PBP
MVI A,LF ;SET LAST CHAR TO LF
STA LASTC
CALL WOBUFF ;CLEAR BUFFER
MVI A,16 ;START OF PRINT LINE
STA PBP
RET
;
ZERO: XRA A
STA ACCLEN
STA STYPE
RET
;
SAVER: ;STORE THE NEXT CHARACTER INTO THE ACCUMULATOR AND UPDATE ACCLEN
LXI H,ACCLEN
MOV A,M
CPI ACMAX
JC SAV1 ;JUMP IF NOT UP TO LAST POSITION
MVI M,0
CALL ERRO
SAV1: MOV E,M ;D,E WILL HOLD INDEX
MVI D,0
INR M ;ACCLEN INCREMENTED
INX H ;ADDRESS ACCUMULATOR
DAD D ;ADD INDEX TO ACCUMULATOR
LDA NEXTC ;GET CHARACTER
MOV M,A ;INTO ACCUMULATOR
RET
;
TDOLL: ;TEST FOR DOLLAR SIGN, ASSUMING H,L ADDRESS NEXTC
MOV A,M
CPI '$'
RNZ
XRA A ;TO GET A ZERO
MOV M,A ;CLEARS NEXTC
RET ;WITH ZERO FLAG SET
;
NUMERIC: ;CHECK NEXTC FOR NUMERIC, RETURN ZERO FLAG IF NOT NUMERIC
LDA NEXTC
SUI '0'
CPI 10
; CARRY RESET IF NUMERIC
RAL
ANI 1B ;ZERO IF NOT NUMERIC
RET
;
HEX: ;RETURN ZERO FLAG IF NEXTC IS NOT HEXADECIMAL
CALL NUMERIC
RNZ ;RETURNS IF 0-9
LDA NEXTC
SUI 'A'
CPI 6
; CARRY SET IF OUT OF RANGE
RAL
ANI 1B
RET
;
LETTER: ;RETURN ZERO FLAG IF NEXTC IS NOT A LETTER
LDA NEXTC
SUI 'A'
CPI 26
RAL
ANI 1B
RET
;
ALNUM: ;RETURN ZERO FLAG IF NOT ALPHANUMERIC
CALL LETTER
RNZ
CALL NUMERIC
RET
;
TRANS: ;TRANSLATE TO UPPER CASE
LDA NEXTC
CPI 'A' OR 1100000B ;LOWER CASE A
RC ;CARRY IF LESS THAN LOWER A
CPI ('Z' OR 1100000B)+1 ;LOWER CASE Z
RNC ;NO CARRY IF GREATER THAN LOWER Z
ANI 1011111B ;CONVERT TO UPPER CASE
STA NEXTC
RET
;
GNCN: ;GET CHARACTER AND STORE TO NEXTC
CALL GNC
STA NEXTC
CALL TRANS ;TRANSLATE TO UPPER CASE
RET
;
EOLT: ;END OF LINE TEST FOR COMMENT SCAN
CPI CR
RZ
CPI EOF
RZ
CPI '!'
RET
;
SCAN: ;FIND NEXT TOKEN IN INPUT STREAM
XRA A
STA TOKEN
CALL ZERO
;
; DEBLANK
DEBL: LDA NEXTC
CPI TAB ;TAB CHARACTER TREATED AS BLANK OUTSIDE STRING
JZ DEB0
CPI ';' ;MAY BE A COMMENT
JZ DEB1 ;DEBLANK THROUGH COMMENT
CPI '*' ;PROCESSOR TECH COMMENT
JNZ DEB2 ;NOT *
LDA LASTC
CPI LF ;LAST LINE FEED?
JNZ DEB2 ;NOT LF*
; COMMENT FOUND, REMOVE IT
DEB1: CALL GNCN
CALL EOLT ;CR, EOF, OR !
JZ FINDL ;HANDLE END OF LINE
JMP DEB1 ;OTHERWISE CONTINUE SCAN
DEB2: ORI ' ' ;MAY BE ZERO
CPI ' '
JNZ FINDL
DEB0: CALL GNCN ;GET NEXT AND STORE TO NEXTC
JMP DEBL
;
; LINE DEBLANKED, FIND TOKEN TYPE
FINDL: ;LOOK FOR LETTER, DECIMAL DIGIT, OR STRING QUOTE
CALL LETTER
JZ FIND0
MVI A,IDEN
JMP STOKEN
;
FIND0: CALL NUMERIC
JZ FIND1
MVI A,NUMB
JMP STOKEN
;
FIND1: LDA NEXTC
CPI ''''
JNZ FIND2
XRA A
STA NEXTC ;DON'T STORE THE QUOTE
MVI A,STRNG
JMP STOKEN
;
FIND2: ;ASSUME IT IS A SPECIAL CHARACTER
CPI LF ;IF LF THEN DUMP THE BUFFER
JNZ FIND3
; LF FOUND
LDA PASS
ORA A
CNZ WOBUFF
LXI H,PBUFF ;CLEAR ERROR CHAR ON BOTH PASSES
MVI M,' '
MVI A,16
STA PBP ;START NEW LINE
FIND3: MVI A,SPECL
;
STOKEN: STA TOKEN
;
;
; LOOP WHILE CURRENT ITEM IS ACCUMULATING
SCTOK: LDA NEXTC
STA LASTC ;SAVE LAST CHARACTER
ORA A
CNZ SAVER ;STORE CHARACTER INTO ACCUM IF NOT ZERO
CALL GNCN ;GET NEXT TO NEXTC
LDA TOKEN
CPI SPECL
RZ ;RETURN IF SPECIAL CHARACTER
CPI STRNG
CNZ TRANS ;TRANSLATE TO UPPER CASE IF NOT IN STRING
LXI H,NEXTC
LDA TOKEN
;
CPI IDEN
JNZ SCT2
;
; ACCUMULATING AN IDENTIFIER
CALL TDOLL ;$?
JZ SCTOK ;IF SO, SKIP IT
CALL ALNUM ;ALPHA NUMERIC?
RZ ;RETURN IF END
; NOT END OF THE IDENTIFIER
JMP SCTOK
;
SCT2: ;NOT SPECIAL OR IDENT, CHECK NUMBER
CPI NUMB
JNZ SCT3
;
; ACCUMULATING A NUMBER, CHECK FOR $
CALL TDOLL
JZ SCTOK ;SKIP IF FOUND
CALL HEX ;HEX CHARACTER?
JNZ SCTOK ;STORE IT IF FOUND
; END OF NUMBER, LOOK FOR RADIX INDICATOR
;
LDA NEXTC
CPI 'O' ;OCTAL INDICATOR
JZ NOCT
CPI 'Q' ;OCTAL INDICATOR
JNZ NUM2
;
NOCT: ;OCTAL
MVI A,OCTV
JMP SSTYP
;
NUM2: CPI 'H'
JNZ NUM3
MVI A,HEXV
SSTYP: STA STYPE
XRA A
STA NEXTC ;CLEARS THE LOOKAHEAD CHARACTER
JMP NCON
;
; RADIX MUST COME FROM ACCUM
NUM3: LDA LASTC
CPI 'B'
JNZ NUM4
MVI A,BINV
JMP SSTY1
;
NUM4: CPI 'D'
MVI A,DECV
JNZ SSTY2
SSTY1: LXI H,ACCLEN
DCR M ;ACCLEN DECREMENTED TO REMOVE RADIX INDICATOR
SSTY2: STA STYPE
;
NCON: ;NUMERIC CONVERSION OCCURS HERE
LXI H,0
SHLD VALUE ;VALUE ACCUMULATES BINARY EQUIVALENT
LXI H,ACCLEN
MOV C,M ;C=ACCLEN
INX H ;ADDRESSES ACCUM
CLOP: ;NEXT DIGIT IS PROCESSED HERE
MOV A,M
INX H ;READY FOR NEXT LOOP
CPI 'A'
JNC CLOP1 ;NOT HEX A-F
SUI '0' ;NORMALIZE
JMP CLOP2
;
CLOP1: ;HEX A-F
SUI 'A'-10
CLOP2: ;CHECK SIZE AGAINST RADIX
PUSH H ;SAVE ACCUM ADDR
PUSH B ;SAVE CURRENT POSITION
MOV C,A
LXI H,STYPE
CMP M
CNC ERRV ;VALUE ERROR IF DIGIT>=RADIX
MVI B,0 ;DOUBLE PRECISION DIGIT
MOV A,M ;RADIX TO ACCUMULATOR
LHLD VALUE
XCHG ;VALUE TO D,E - ACCUMULATE RESULT IN H,L
LXI H,0 ;ZERO ACCUMULATOR
CLOP3: ;LOOP UNTIL RADIX GOES TO ZERO
ORA A
JZ CLOP4
RAR ;TEST LSB
JNC TTWO ;SKIP SUMMING OPERATION IF LSB=0
DAD D ;ADD IN VALUE
TTWO: ;MULTIPLY VALUE * 2 FOR SHL OPERATION
XCHG
DAD H
XCHG
JMP CLOP3
;
;
CLOP4: ;END OF NUMBER CONVERSION
DAD B ;DIGIT ADDED IN
SHLD VALUE
POP B
POP H
DCR C ;MORE DIGITS?
JNZ CLOP
RET ;DONE WITH THE NUMBER
;
SCT3: ;MUST BE A STRING
LDA NEXTC
CPI CR ;END OF LINE?
JZ ERRO ;AND RETURN
CPI ''''
JNZ SCTOK
CALL GNCN
CPI ''''
RNZ ;RETURN IF SINGLE QUOTE ENCOUNTERED
JMP SCTOK ;OTHERWISE TREAT AS ONE QUOTE
;
; END OF SCANNER
;
; ERROR MESSAGE ROUTINES
ERRV: ;'V' VALUE ERROR
PUSH PSW
MVI A,'V'
JMP ERR
;
ERRO: ;'O' OVERFLOW ERROR
PUSH PSW
MVI A,'O'
JMP ERR
;
ERR: ;PRINT ERROR MESSAGE
PUSH B
PUSH H
CALL PERR
POP H
POP B
POP PSW
RET
;
ENDMOD EQU ($ AND 0FFE0H) + 20H
END


View File

@@ -0,0 +1,385 @@
TITLE 'ASM SYMBOL TABLE MODULE'
; SYMBOL TABLE MANIPULATION MODULE
;
org 0
base equ $
ORG 1340H
IOMOD EQU base+200H ;IO MODULE ENTRY POINT
PCON EQU IOMOD+12H
EOR EQU IOMOD+1EH
;
;
; ENTRY POINTS TO SYMBOL TABLE MODULE
JMP ENDMOD
JMP INISY
JMP LOOKUP
JMP FOUND
JMP ENTER
JMP SETTY
JMP GETTY
JMP SETVAL
JMP GETVAL
;
; COMMON EQUATES
PBMAX EQU 90 ;MAX PRINT SIZE
PBUFF EQU base+10CH ;PRINT BUFFER
PBP EQU PBUFF+PBMAX ;PRINT BUFFER POINTER
;
TOKEN EQU PBP+1 ;CURRENT TOKEN UDER SCAN
VALUE EQU TOKEN+1 ;VALUE OF NUMBER IN BINARY
ACCLEN EQU VALUE+2 ;ACCUMULATOR LENGTH
ACMAX EQU 64 ;MAX ACCUMULATOR LENGTH
ACCUM EQU ACCLEN+1
;
EVALUE EQU ACCUM+ACMAX ;VALUE FROM EXPRESSION ANALYSIS
;
SYTOP EQU EVALUE+2 ;CURRENT SYMBOL TOP
SYMAX EQU SYTOP+2 ;MAX ADDRESS+1
;
PASS EQU SYMAX+2 ;CURRENT PASS NUMBER
FPC EQU PASS+1 ;FILL ADDRESS FOR NEXT HEX BYTE
ASPC EQU FPC+2 ;ASSEMBLER'S PSEUDO PC
SYBAS EQU ASPC+2 ;BASE OF SYMBOL TABLE
SYADR EQU SYBAS+2 ;CURRENT SYMBOL BEING ACCESSED
;
; GLOBAL EQUATES
IDEN EQU 1 ;IDENTIFIER
NUMB EQU 2 ;NUMBER
STRNG EQU 3 ;STRING
SPECL EQU 4 ;SPECIAL CHARACTER
;
PLABT EQU 0001B ;PROGRAM LABEL
DLABT EQU 0010B ;DATA LABEL
EQUT EQU 0100B ;EQUATE
SETT EQU 0101B ;SET
MACT EQU 0110B ;MACRO
;
EXTT EQU 1000B ;EXTERNAL
REFT EQU 1011B ;REFER
GLBT EQU 1100B ;GLOBAL
;
;
CR EQU 0DH
;
; DATA AREAS
; SYMBOL TABLE BEGINS AT THE END OF THIS MODULE
FIXD EQU 5 ;5 BYTES OVERHEAD WITH EACH SYMBOL ENTRY
; 2BY COLLISION, 1BY TYPE/LEN, 2BY VALUE
HSIZE EQU 128 ;HASH TABLE SIZE
HMASK EQU HSIZE-1 ;HASH MASK FOR CODING
HASHT: DS HSIZE*2 ;HASH TABLE
HASHC: DS 1 ;HASH CODE AFTER CALL ON LOOKUP
;
; SYMBOL TABLE ENTRY FORMAT IS
; -----------------
; : HIGH VAL BYTE :
; -----------------
; : LOW VAL BYTE :
; -----------------
; : CHARACTER N :
; -----------------
; : ... :
; -----------------
; : CHARACTER 1 :
; -----------------
; : TYPE : LENG :
; -----------------
; : HIGH COLLISION:
; -----------------
; SYADR= : LOW COLLISION :
; -----------------
;
; WHERE THE LOW/HIGH COLLISION FIELD ADDRESSES ANOTHER ENTRY WITH
; THE SAME HASH CODE (OR ZERO IF THE END OF CHAIN), TYPE DESCRIBES
; THE ENTRY TYPE (GIVEN BELOW), LENG IS THE NUMBER OF CHARACTERS IN
; THE SYMBOL PRINTNAME -1 (I.E., LENG=0 IS A SINGLE CHARACTER PRINT-
; NAME, WHILE LENG=15 INDICATES A 16 CHARACTER NAME). CHARACTER 1
; THROUGH N GIVE THE PRINTNAME CHARACTERS IN ASCII UPPER CASE (ALL
; LOWER CASE NAMES ARE TRANSLATED ON INPUT), AND THE LOW/HIGH VALUE
; GIVE THE PARTICULAR ADDRESS OR CONSTANT VALUE ASSOCIATED WITH THE
; NAME. THE REPRESENTATION OF MACROS DIFFERS IN THE FIELDS WHICH
; FOLLOW THE VALUE FIELD (MACROS ARE NOT CURRENTLY IMPLEMENTED).
;
; THE TYPE FIELD CONSISTS OF FOUR BITS WHICH ARE ASSIGNED AS
; FOLLOWS:
;
; 0000 UNDEFINED SYMBOL
; 0001 LOCAL LABELLED PROGRAM
; 0010 LOCAL LABELLED DATA
; 0011 (UNUSED)
; 0100 EQUATE
; 0101 SET
; 0110 MACRO
; 0111 (UNUSED)
;
; 1000 (UNUSED)
; 1001 EXTERN LABELLED PROGRAM
; 1010 EXTERN LABELLED DATA
; 1011 REFERENCE TO MODULE
; 1100 (UNUSED)
; 1101 GLOBAL UNDEFINED SYMBOL
; 1110 GLOBAL LABELLED PROGRAM
; 1111 (UNUSED)
;
; TYPE DEFINITIONS
;
PLABT EQU 0001B ;PROGRAM LABEL
DLABT EQU 0010B ;DATA LABEL
EQUT EQU 0100B ;EQUATE
SETT EQU 0101B ;SET
MACT EQU 0110B ;MACRO
;
EXTT EQU 1000B ;EXTERNAL ATTRIBUTE
REFT EQU 1011B ;REFER
GLBT EQU 1100B ;GLOBAL ATTRIBUTE
;
;
INISY: ;INITIALIZE THE SYMBOL TABLE
LXI H,HASHT ;ZERO THE HASH TABLE
MVI B,HSIZE
XRA A ;CLEAR ACCUM
INI0:
MOV M,A
INX H
MOV M,A ;CLEAR DOUBLE WORD
INX H
DCR B
JNZ INI0
;
; SET SYMBOL TABLE POINTERS
LXI H,0
SHLD SYADR
;
RET
;
CHASH: ;COMPUTE HASH CODE FOR CURRENT ACCUMULATOR
LXI H,ACCLEN
MOV B,M ;GET ACCUM LENGTH
XRA A ;CLEAR ACCUMULATOR
CH0: INX H ;MOVE TO FIRST/NEXT CHARACTER POSITION
ADD M ;ADD WITH OVERFLOW
DCR B
JNZ CH0
ANI HMASK ;MASK BITS FOR MODULO HZISE
STA HASHC ;FILL HASHC WITH RESULT
RET
;
SETLN: ;SET THE LENGTH FIELD OF THE CURRENT SYMBOL
MOV B,A ;SAVE LENGTH IN B
LHLD SYADR
INX H
INX H
MOV A,M ;GET TYPE/LENGTH FIELD
ANI 0F0H ;MASK OUT TYPE FIELD
ORA B ;MASK IN LENGTH
MOV M,A
RET
;
GETLN: ;GET THE LENGTH FIELD TO REG-A
LHLD SYADR
INX H
INX H
MOV A,M
ANI 0FH
INR A ;LENGTH IS STORED AS VALUE - 1
RET
;
FOUND: ;FOUND RETURNS TRUE IF SYADR IS NOT ZERO (TRUE IS NZ FLAG HERE)
LHLD SYADR
MOV A,L
ORA H
RET
;
LOOKUP: ;LOOK FOR SYMBOL IN ACCUMULATOR
CALL CHASH ;COMPUTE HASH CODE
; NORMALIZE IDENTIFIER TO 16 CHARACTERS
LXI H,ACCLEN
MOV A,M
CPI 17
JC LENOK
MVI M,16
LENOK:
; LOOK FOR SYMBOL THROUGH HASH TABLE
LXI H,HASHC
MOV E,M
MVI D,0 ;DOUBLE HASH CODE IN D,E
LXI H,HASHT ;BASE OF HASH TABLE
DAD D
DAD D ;HASHT(HASHC)
MOV E,M ;LOW ORDER ADDRESS
INX H
MOV H,M
MOV L,E ;HEADER TO LIST OF SYMBOLS IS IN H,L
LOOK0: SHLD SYADR
CALL FOUND
RZ ;RETURN IF SYADR BECOMES ZERO
;
; OTHERWISE EXAMINE CHARACTER STRING FOR MATCH
CALL GETLN ;GET LENGTH TO REG-A
LXI H,ACCLEN
CMP M
JNZ LCOMP
;
; LENGTH MATCH, TRY TO MATCH CHARACTERS
MOV B,A ;STRING LENGTH IN B
INX H ;HL ADDRESSES ACCUM
XCHG ;TO D,E
LHLD SYADR
INX H
INX H
INX H ;ADDRESSES CHARACTERS
LOOK1: LDAX D ;NEXT CHARACTER FROM ACCUM
CMP M ;NEXT CHARACTER IN SYMBOL TABLE
JNZ LCOMP
; CHARACTER MATCHED, INCREMENT TO NEXT
INX D
INX H
DCR B
JNZ LOOK1
;
; COMPLETE MATCH AT CURRENT SYMBOL, SYADR IS SET
RET
;
LCOMP: ;NOT FOUND, MOVE SYADR DOWN ONE COLLISION ADDRESS
LHLD SYADR
MOV E,M
INX H
MOV D,M ;COLLISION ADDRESS IN D,E
XCHG
JMP LOOK0
;
;
ENTER: ;ENTER SYMBOL IN ACCUMULATOR
; ENSURE THERE IS ENOUGH SPACE IN THE TABLE
LXI H,ACCLEN
MOV E,M
MVI D,0 ;DOUBLE PRECISION ACCLEN IN D,E
LHLD SYTOP
SHLD SYADR ;NEXT SYMBOL LOCATION
DAD D ;SYTOP+ACCLEN
LXI D,FIXD ;FIXED DATA/SYMBOL
DAD D ;HL HAS NEXT TABLE LOCATION FOR SYMBOL
XCHG ;NEW SYTOP IN D,E
LHLD SYMAX ;MAXIMUM SYMTOP VALUE
MOV A,E
SUB L ;COMPUTE 16-BIT DIFFERENCE
MOV A,D
SBB H
XCHG ;NEW SYTOP IN H,L
JNC OVERER ;OVERFLOW IN TABLE
;
; OTHERWISE NO ERROR
SHLD SYTOP ;SET NEW TABLE TOP
LHLD SYADR ;SET COLLISION FIELD
XCHG ;CURRENT SYMBOL ADDRESS TO D,E
LXI H,HASHC ;HASH CODE FOR CURRENT SYMBOL TO H,L
MOV C,M ;LOW BYTE
MVI B,0 ;DOUBLE PRECISION VALUE IN B,C
LXI H,HASHT ;BASE OF HASH TABLE
DAD B
DAD B ;HASHT(HASHC) IN H,L
; D,E ADDRESSES CURRENT SYMBOL - CHANGE LINKS
MOV C,M ;LOW ORDER OLD HEADER
INX H
MOV B,M ;HIGH ORDER OLD HEADER
MOV M,D ;HIGH ORDER NEW HEADER TO HASH TABLE
DCX H
MOV M,E ;LOW ORDER NEW HEADER TO HASH TABLE
XCHG ;H,L HOLDS SYMBOL TABLE ADDRESS
MOV M,C ;LOW ORDER OLD HEADER TO COLLISION FIELD
INX H
MOV M,B ;HIGH ORDER OLD HEADER TO COLLISION FIELD
;
; HASH CHAIN NOW REPAIRED FOR THIS ENTRY, COPY THE PRINTNAME
LXI D,ACCLEN
LDAX D ;GET SYMBOL LENGTH
CPI 17 ;LARGER THAN 16 SYMBOLS?
JC ENT1
MVI A,16 ;TRUNCATE TO 16 CHARACTERS
; COPY LENGTH FIELD, FOLLOWED BY PRINTNAME CHARACTERS
ENT1: MOV B,A ;COPY LENGTH TO B
DCR A ;1-16 CHANGED TO 0-15
INX H ;FOLLOWING COLLISION FIELD
MOV M,A ;STORE LENGTH WITH UNDEFINED TYPE (0000)
ENT2: INX H
INX D
LDAX D
MOV M,A ;STORE NEXT CHARACTER OF PRINTNAME
DCR B ;LENGTH=LENGTH-1
JNZ ENT2 ;FOR ANOTHER CHARACTER
;
; PRINTNAME COPIED, ZERO THE VALUE FIELD
XRA A ;ZERO A
INX H ;LOW ORDER VALUE
MOV M,A
INX H
MOV M,A ;HIGH ORDER VALUE
RET
;
OVERER: ;OVERFLOW IN SYMBOL TABLE
LXI H,ERRO
CALL PCON
JMP EOR ;END OF EXECUTION
ERRO: DB 'SYMBOL TABLE OVERFLOW',CR
;
SETTY: ;SET CURRENT SYMBOL TYPE TO VALUE IN REG-A
RAL
RAL
RAL
RAL
ANI 0F0H ;TYPE MOVED TO HIGH ORDER 4-BITS
MOV B,A ;SAVE IT IN B
LHLD SYADR ;BASE OF SYMBOL TO ACCESS
INX H
INX H ;ADDRESS OF TYPE/LENGTH FIELD
MOV A,M ;GET IT AND MASK
ANI 0FH ;LEAVE LENGTH
ORA B ;MASK IN TYPE
MOV M,A ;STORE IT
RET
;
GETTY: ;RETURN THE TYPE OF THE VALUE IN CURRENT SYMBOL
LHLD SYADR
INX H
INX H
MOV A,M
RAR
RAR
RAR
RAR
ANI 0FH ;TYPE MOVED TO LOW 4-BITS OF REG-A
RET
;
VALADR: ;GET VALUE FIELD ADDRESS FOR CURRENT SYMBOL
CALL GETLN ;PRINTNAME LENGTH TO ACCUM
LHLD SYADR ;BASE ADDRESS
MOV E,A
MVI D,0
DAD D ;BASE(LEN)
INX H
INX H ;FOR COLLISION FIELD
INX H ;FOR TYPE/LEN FIELD
RET ;WITH H,L ADDRESSING VALUE FIELD
;
SETVAL: ;SET THE VALUE FIELD OF THE CURRENT SYMBOL
; VALUE IS SENT IN H,L
PUSH H ;SAVE VALUE TO SET
CALL VALADR
POP D ;POP VALUE TO SET, HL HAS ADDRESS TO FILL
MOV M,E
INX H
MOV M,D ;FIELD SET
RET
;
GETVAL: ;GET THE VALUE FIELD OF THE CURRENT SYMBOL TO H,L
CALL VALADR ;ADDRESS OF VALUE FIELD TO H,L
MOV E,M
INX H
MOV D,M
XCHG
RET
;
ENDMOD EQU ($ AND 0FFE0H) + 20H
END


View File

@@ -0,0 +1,418 @@
TITLE 'ASM TABLE SEARCH MODULE'
org 0
base equ $
ORG 15A0H
JMP ENDMOD ;TO NEXT MODULE
JMP BSEAR
JMP BGET
;
; COMMON EQUATES
PBMAX EQU 90 ;MAX PRINT SIZE
PBUFF EQU base+10CH ;PRINT BUFFER
PBP EQU PBUFF+PBMAX ;PRINT BUFFER POINTER
;
TOKEN EQU PBP+1 ;CURRENT TOKEN UDER SCAN
VALUE EQU TOKEN+1 ;VALUE OF NUMBER IN BINARY
ACCLEN EQU VALUE+2 ;ACCUMULATOR LENGTH
ACMAX EQU 64 ;MAX ACCUMULATOR LENGTH
ACCUM EQU ACCLEN+1
;
EVALUE EQU ACCUM+ACMAX ;VALUE FROM EXPRESSION ANALYSIS
;
SYTOP EQU EVALUE+2 ;CURRENT SYMBOL TOP
SYMAX EQU SYTOP+2 ;MAX ADDRESS+1
;
PASS EQU SYMAX+2 ;CURRENT PASS NUMBER
FPC EQU PASS+1 ;FILL ADDRESS FOR NEXT HEX BYTE
ASPC EQU FPC+2 ;ASSEMBLER'S PSEUDO PC
;
; GLOBAL EQUATES
IDEN EQU 1 ;IDENTIFIER
NUMB EQU 2 ;NUMBER
STRNG EQU 3 ;STRING
SPECL EQU 4 ;SPECIAL CHARACTER
;
PLABT EQU 0001B ;PROGRAM LABEL
DLABT EQU 0010B ;DATA LABEL
EQUT EQU 0100B ;EQUATE
SETT EQU 0101B ;SET
MACT EQU 0110B ;MACRO
;
EXTT EQU 1000B ;EXTERNAL
REFT EQU 1011B ;REFER
GLBT EQU 1100B ;GLOBAL
;
;
CR EQU 0DH ;CARRIAGE RETURN
;
;
; TABLE DEFINITIONS
;
; TYPES
XBASE EQU 0 ;START OF OPERATORS
; O1 THROUGH O15 DENOTE OPERATIONS
RT EQU 16
PT EQU RT+1 ;RT IS REGISTER TYPE, PT IS PSEUDO OPERATION
OBASE EQU PT+1
O1 EQU OBASE+1 ;SIMPLE
O2 EQU OBASE+2 ;LXI
O3 EQU OBASE+3 ;DAD
O4 EQU OBASE+4 ;PUSH/POP
O5 EQU OBASE+5 ;JMP/CALL
O6 EQU OBASE+6 ;MOV
O7 EQU OBASE+7 ;MVI
O8 EQU OBASE+8 ;ACC IMMEDIATE
O9 EQU OBASE+9 ;LDAX/STAX
O10 EQU OBASE+10 ;LHLD/SHLD/LDA/STA
O11 EQU OBASE+11 ;ACCUM REGISTER
O12 EQU OBASE+12 ;INC/DEC
O13 EQU OBASE+13 ;INX/DCX
O14 EQU OBASE+14 ;RST
O15 EQU OBASE+15 ;IN/OUT
;
; X1 THROUGH X15 DENOTE OPERATORS
X1 EQU XBASE ;*
X2 EQU XBASE+1 ;/
X3 EQU XBASE+2 ;MOD
X4 EQU XBASE+3 ;SHL
X5 EQU XBASE+4 ;SHR
X6 EQU XBASE+5 ;+
X7 EQU XBASE+6 ;-
X8 EQU XBASE+7 ;UNARY -
X9 EQU XBASE+8 ;NOT
X10 EQU XBASE+9 ;AND
X11 EQU XBASE+10;OR
X12 EQU XBASE+11;XOR
X13 EQU XBASE+12;(
X14 EQU XBASE+13;)
X15 EQU XBASE+14;,
X16 EQU XBASE+15;CR
;
;
;
;
; RESERVED WORD TABLES
;
; BASE ADDRESS VECTOR FOR CHARACTERS
CINX: DW CHAR1 ;LENGTH 1 BASE
DW CHAR2 ;LENGTH 2 BASE
DW CHAR3 ;LENGTH 3 BASE
DW CHAR4 ;LENGTH 4 BASE
DW CHAR5 ;LENGTH 5 BASE
DW CHAR6 ;LENGTH 6 BASE
;
CMAX EQU ($-CINX)/2-1 ;LARGEST STRING TO MATCH
;
CLEN: ;LENGTH VECTOR GIVES THE NUMBER OF ITEMS IN EACH TABLE
DB CHAR2-CHAR1
DB (CHAR3-CHAR2)/2
DB (CHAR4-CHAR3)/3
DB (CHAR5-CHAR4)/4
DB (CHAR6-CHAR5)/5
;
TVINX: ;TABLE OF TYPE,VALUE PAIRS FOR EACH RESERVED SYMBOL
DW TV1
DW TV2
DW TV3
DW TV4
DW TV5
;
; CHARACTER VECTORS FOR 1,2,3,4, AND 5 CHARACTER NAMES
CHAR1: DB CR,'()*'
DB '+'
DB ',-/A'
DB 'BCDE'
DB 'HLM'
;
CHAR2: DB 'DBDIDSDW'
DB 'EIIFINOR'
DB 'SP'
;
CHAR3: DB 'ACIADCADDADI'
DB 'ANAANDANICMA'
DB 'CMCCMPCPIDAA'
DB 'DADDCRDCXEND'
DB 'EQUHLTINRINX'
DB 'JMPLDALXIMOD'
DB 'MOVMVINOPNOT'
DB 'ORAORGORIOUT'
DB 'POPPSWRALRAR'
DB 'RETRLCRRCRST'
DB 'SBBSBISETSHL'
DB 'SHRSTASTCSUB'
DB 'SUIXORXRAXRI'
;
CHAR4: DB 'CALLENDMLDAXLHLDPCHL'
DB 'PUSHSHLDSPHLSTAX'
DB 'XCHGXTHL'
;
CHAR5: DB 'ENDIFMACROTITLE'
;
CHAR6: ;END OF CHARACTER VECTOR
;
TV1: ;TYPE,VALUE PAIRS FOR CHAR1 VECTOR
DB X16,10, X13,20 ;CR (
DB X14,30, X1,80 ;) *
DB X6,70 ;+
DB X15,10, X7,70 ;, -
DB X2,80, RT,7 ;/ A
DB RT,0, RT,1 ;B C
DB RT,2, RT,3 ;D E
DB RT,4, RT,5 ;H L
DB RT,6 ;M
;
TV2: ;TYPE,VALUE PAIRS FOR CHAR2 VECTOR
DB PT,1, O1,0F3H ;DB DI
DB PT,2, PT,3 ;DS DW
DB O1,0FBH, PT,8 ;EI IF
DB O15,0DBH, X11,40 ;IN OR
DB RT,6 ;SP
;
;
TV3: ;TYPE,VALUE PAIRS FOR CHAR3 VECTOR
DB O8,0CEH, O11,88H ;ACI ADC
DB O11,80H, O8,0C6H ;ADD ADI
DB O11,0A0H, X10,50 ;ANA AND
DB O8,0E6H, O1,2FH ;ANI CMA
DB O1,3FH, O11,0B8H ;CMC CMP
DB O8,0FEH, O1,27H ;CPI DAA
DB O3,09H, O12,05H ;DAD DCR
DB O13,0BH, PT,4 ;DCX END
DB PT,7, O1,76H ;EQU HLT
DB O12,04H, O13,03H ;INR INX
DB O5,0C3H, O10,3AH ;JMP LDA
DB O2,01H, X3,80 ;LXI MOD
DB O6,40H, O7,06H ;MOV MVI
DB O1,00H, X9,60 ;NOP NOT
DB O11,0B0H, PT,10 ;ORA ORG
DB O8,0F6H, O15,0D3H ;ORI OUT
DB O4,0C1H, RT,6 ;POP PSW
DB O1,17H, O1,1FH ;RAL RAR
DB O1,0C9H, O1,07H ;RET RLC
DB O1,0FH, O14,0C7H ;RRC RST
DB O11,098H, O8,0DEH ;SBB SBI
DB PT,11, X4,80 ;SET SHL
DB X5,80, O10,32H ;STA STC
DB O1,37H, O11,90H ;STC SUB
DB O8,0D6H, X12,40 ;SUI XOR
DB O11,0A8H, O8,0EEH ;XRA XRI
;
;
TV4: ;TYPE,VALUE PAIRS FOR CHAR4 VECTOR
DB O5,0CDH ;CALL
DB PT,6, O9,0AH ;ENDM LDAX
DB O10,02AH, O1,0E9H ;LHLD PCHL
DB O4,0C5H, O10,22H ;PUSH SHLD
DB O1,0F9H, O9,02H ;SPHL STAX
DB O1,0EBH, O1,0E3H ;XCHG XTHL
;
TV5: ;TYPE,VALUE PAIRS FOR CHAR5 VECTOR
DB PT,5, PT,9 ;ENDIF MACRO
DB PT,12 ;TITLE
;
SUFTAB: ;TABLE OF SUFFIXES FOR J C AND R OPERATIONS
DB 'NZZ NCC POPEP M '
;
BSEAR: ;BINARY SEARCH MNEMONIC TABLE
; INPUT: UR = UPPER BOUND OF TABLE (I.E., TABLE LENGTH-1)
; SR = SIZE OF EACH TABLE ELEMENT
; H,L ADDRESS BASE OF TABLE TO SEARCH
; OUTPUT: ZERO FLAG INDICATES MATCH WAS FOUND, IN WHICH CASE
; THE ACCUMULATOR CONTAINS AN INDEX TO THE ELEMENT
; NOT ZERO FLAG INDICATES NO MATCH FOUND IN TABLE
;
UR EQU B ;UPPER BOUND REGISTER
LR EQU C ;LOWER BOUND REGISTER
SR EQU D ;SIZE REGISTER
MR EQU E ;MIDDLE POINTER REGISTER
SP1 EQU B ;SIZE PRIME, USED IN COMPUTING MIDDLE POSITON
SP1P EQU C ;ANOTHER COPY OF SIZE PRIME
KR EQU H ;K
;
MVI MR,255 ;MARK M <> OLD M
INR UR ;U=U+1
MVI LR,0 ;L = 0
;
; COMPUTE M' = (U+L)/2
NEXT: XRA A
MOV A,UR ;CY=0, A=U
ADD LR ;(U+L)
RAR ;(U+L)/2
CMP MR ;SAME AS LAST TIME THROUGH?
JZ NMATCH ;JUMP IF = TO NO MATCH
;
; MORE ELEMENTS TO SCAN
MOV MR,A ;NEW MIDDLE VALUE
PUSH H ;SAVE A COPY OF THE BASE ADDRESS
PUSH D ;SAVE S,M
PUSH B ;SAVE U,L
PUSH H ;SAVE ANOTHER COPY OF THE BASE ADDRESS
MOV SP1,SR ;S' = S
MOV SP1P,SP1 ;S'' = S'
MVI SR,0 ;FOR DOUBLE ADD OPERATION BELOW (DOUBLE M)
;
LXI KR,0 ;K=0
SUMK: DAD D ;K = K + M
DCR SP1 ;S' = S' - 1
JNZ SUMK ;DECREMENT IF SP1 <> 0
;
; K IS NOW RELATIVE BYTE POSITION
POP D ;TABLE BASE ADDRESS
DAD D ;H,L CONTAINS ABSOLUTE ADDRESS OF BYTE TO COMPARE
LXI D,ACCUM ;D,E ADDRESS CHARACTERS TO COMPARE
;
COMK: ;COMPARE NEXT CHARACTER
LDAX D ;ACCUM CHARACTER TO REG A
CMP M ;SAME AS TABLE ENTRY?
INX D
INX H ;TO NEXT POSITIONS
JNZ NCOM ;JUMP IF NOT THE SAME
DCR SP1P ;MORE CHARACTERS?
JNZ COMK
;
; COMPLETE MATCH AT M
POP B
POP D ;M RESTORED
POP H
MOV A,MR ;VALUE OF M COPIED IN A
RET ;WITH ZERO FLAG SET
;
NCOM: ;NO MATCH, DETERMINE IF LESS OR GREATER
POP B ;U,L
POP D ;S,M
POP H ;TABLE ADDRESS
JC NCOML
; ACCUM IS HIGHER
MOV LR,MR ;L = M
JMP NEXT
;
NCOML: ;ACCUMULATOR IS LOW
MOV UR,MR ;U = M
JMP NEXT
;
NMATCH: ;NO MATCH
XRA A
INR A ;SETS NOT ZERO FLAG
RET
;
PREFIX: ;J C OR R PREFIX?
LDA ACCUM
LXI B,(0C2H SHL 8) OR O5 ;JNZ OPCODE TO B, TYPE TO C
CPI 'J'
RZ ;RETURN WITH ZERO FLAG SET IF J
MVI B,0C4H ;CNZ OPCODE TO B, TYPE IS IN C
CPI 'C'
RZ
LXI B,(0C0H SHL 8) OR O1 ;RNZ OPCODE
CPI 'R'
RET
;
SUFFIX: ;J R OR C RECOGNIZED, LOOK FOR SUFFIX
LDA ACCLEN
CPI 4 ;CHECK LENGTH
JNC NSUFF ;CARRY IF 0,1,2,3 IN LENGTH
CPI 3
JZ SUF0 ;ASSUME 1 OR 2 IF NO BRANCH
CPI 2
JNZ NSUFF ;RETURNS IF 0 OR 1
LXI H,ACCUM+2
MVI M,' ' ;BLANK-OUT FOR MATCH ATTEMPT
SUF0: ;SEARCH 'TIL END OF TABLE
LXI B,8 ;B=0, C=8 COUNTS TABLE DOWN TO ZERO OR MATCH
LXI D,SUFTAB
NEXTS: ;LOOK AT NEXT SUFFIX
LXI H,ACCUM+1 ;SUFFIX POSITION
LDAX D ;CHARACTER TO ACCUM
CMP M
INX D ;READY FOR NEXT CHARACTER
JNZ NEXT0 ;JMP IF NO MATCH
LDAX D ;GET NEXT CHARACTER
INX H ;READY FOR COMPARE WITH ACCUM
CMP M ;SAME?
RZ ;RETURN WITH ZERO FLAG SET, B IS SUFIX
NEXT0: INX D ;MOVE TO NEXT CHARACTER
INR B ;COUNT SUFFIX UP
DCR C ;COUNT TABLE LENGTH DOWN
JNZ NEXTS
; END OF TABLE, MARK WITH NON ZERO FLAG
INR C
RET
;
NSUFF: ;NOT PROPER SUFFIX - SET NON ZERO FLAG
XRA A
INR A
RET
;
BGET: ;PERFORM BINARY SEARCH, AND EXTRACT TYPE AND VAL FIELDS FOR
; THE ITEM. ZERO FLAG INDICATES MATCH WAS FOUND, WITH TYPE
; IN THE ACCUMULATOR, AND VAL IN REGISTER B. THE SEARCH IS BASED
; UPON THE LENGTH OF THE ACCUMULATOR
LDA ACCLEN ;ITEM LENGTH
MOV C,A ;SAVE A COPY
DCR A ;ACCLEN-1
MOV E,A
MVI D,0 ;DOUBLE ACCLEN-1 TO D,E
PUSH D ;SAVE A COPY FOR LATER
CPI CMAX ;TOO LONG?
JNC NGET ;NOT IN RANGE IF CARRY
LXI H,CLEN ;LENGTH VECTOR
DAD D
MOV UR,M ;FILL UPPER BOUND FROM MEMORY
LXI H,CINX
DAD D
DAD D ;BASE ADDRESS TO H,L
MOV D,M
INX H
MOV H,M
MOV L,D ;NOW IN H,L
MOV SR,C ;FILL THE SIZE REGISTER
CALL BSEAR ;PERFORM THE BINARY SEARCH
JNZ SCASE ;ZERO IF FOUND
POP D ;RESTORE INDEX
LXI H,TVINX
DAD D
DAD D ;ADDRESSING PROPER TV ELEMENT
MOV E,M
INX H
MOV D,M
; D,E IS BASE ADDRESS OF TYPE/VALUE VECTOR, ADD DISPLACEMENT
MOV L,A
MVI H,0
DAD H ;DOUBLED
DAD D ;INDEXED
MOV A,M ;TYPE TO ACC
INX H
MOV B,M ;VALUE TO B
RET ;TYPE IN ACC, VALUE IN B
;
SCASE: ;NAME NOT TOO LONG, BUT NOT FOUND IN TABLES, MAY BE J C OR R
POP D ;RESTORE INDEX
CALL PREFIX
RNZ ;NOT FOUND AS PREFIX J C OR R IF NOT ZERO FLAG
PUSH B ;SAVE VALUE AND TYPE
CALL SUFFIX ;ZERO IF SUFFIX MATCHED
MOV A,B ;READY FOR MASK IF ZERO FLAG
POP B ;RECALL VALUE AND TYPE
RNZ ;RETURN IF NOT ZERO FLAG SET
; MASK IN THE PROPER BITS AND RETURN
ORA A ;CLEAR CARRY
RAL
RAL
RAL
ORA B ;VALUE SET TO JNZ ...
MOV B,A ;REPLACE
MOV A,C ;RETURN WITH TYPE IN REGISTER A
CMP A ;CLEAR THE ZERO FLAG
RET
;
NGET: ;CAN'T FIND THE ENTRY, RETURN WITH ZERO FLAG RESET
POP D ;GET THE ELEMENT BACK
XRA A ;CLEAR
INR A ;ZERO FLAG RESET
RET
;
;
ENDMOD EQU ($ AND 0FFE0H) + 20H ;NEXT MODULE ADDRESS
END


View File

@@ -0,0 +1,597 @@
TITLE 'ASM OPERAND SCAN MODULE'
; OPERAND SCAN MODULE
org 0
base equ $
ORG 1860H
;
; EXTERNALS
IOMOD EQU base+200H ;I/O MODULE
SCMOD EQU base+1100H ;SCANNER MODULE
SYMOD EQU base+1340H ;SYMBOL TABLE MODULE
BMOD EQU base+15A0H ;BINARY SEARCH MODULE
;
;
PERR EQU IOMOD+18H
SCAN EQU SCMOD+6H ;SCANNER ENTRY POINT
CR EQU 0DH ;CARRIAGE RETURN
;
LOOKUP EQU SYMOD+6H ;LOOKUP
FOUND EQU LOOKUP+3 ;FOUND SYMBOL IF ZERO FLAG NOT SET
ENTER EQU FOUND+3 ;ENTER SYMBOL
SETTY EQU ENTER+3 ;SET TYPE FIELD
GETTY EQU SETTY+3 ;SET TYPE FIELD
SETVAL EQU GETTY+3 ;SET VALUE FIELD
GETVAL EQU SETVAL+3 ;GET VALUE FIELD
;
BSEAR EQU BMOD+3 ;BINARY SEARCH ROUTINE
BGET EQU BSEAR+3 ;GET VALUES WITH SEARCH
;
; COMMON EQUATES
PBMAX EQU 90 ;MAX PRINT SIZE
PBUFF EQU base+10CH ;PRINT BUFFER
PBP EQU PBUFF+PBMAX ;PRINT BUFFER POINTER
;
TOKEN EQU PBP+1 ;CURRENT TOKEN UDER SCAN
VALUE EQU TOKEN+1 ;VALUE OF NUMBER IN BINARY
ACCLEN EQU VALUE+2 ;ACCUMULATOR LENGTH
ACMAX EQU 64 ;MAX ACCUMULATOR LENGTH
ACCUM EQU ACCLEN+1
;
EVALUE EQU ACCUM+ACMAX ;VALUE FROM EXPRESSION ANALYSIS
;
SYTOP EQU EVALUE+2 ;CURRENT SYMBOL TOP
SYMAX EQU SYTOP+2 ;MAX ADDRESS+1
;
PASS EQU SYMAX+2 ;CURRENT PASS NUMBER
FPC EQU PASS+1 ;FILL ADDRESS FOR NEXT HEX BYTE
ASPC EQU FPC+2 ;ASSEMBLER'S PSEUDO PC
;
; GLOBAL EQUATES
IDEN EQU 1 ;IDENTIFIER
NUMB EQU 2 ;NUMBER
STRNG EQU 3 ;STRING
SPECL EQU 4 ;SPECIAL CHARACTER
;
PLABT EQU 0001B ;PROGRAM LABEL
DLABT EQU 0010B ;DATA LABEL
EQUT EQU 0100B ;EQUATE
SETT EQU 0101B ;SET
MACT EQU 0110B ;MACRO
;
EXTT EQU 1000B ;EXTERNAL
REFT EQU 1011B ;REFER
GLBT EQU 1100B ;GLOBAL
;
;
; TABLE DEFINITIONS
XBASE EQU 0 ;START OF OPERATORS
OPER EQU 15 ;LAST OPERATOR
RT EQU 16
PT EQU RT+1 ;RT IS REGISTER TYPE, PT IS PSEUDO OPERATION
OBASE EQU PT+1
;
PLUS EQU 5
MINUS EQU 6
NOTF EQU 8 ;NOT
LPAR EQU 12
RPAR EQU 13
OSMAX EQU 10
VSMAX EQU 8*2
;
;
; BEGINNING OF MODULE
JMP ENDMOD ;PAST THIS MODULE
JMP OPAND ;SCAN OPERAND FIELD
JMP MULF ;MULTIPLY FUNCTION
JMP DIVE ;DIVIDE FUNCTION
UNARY: DS 1 ;TRUE IF NEXT OPERATOR IS UNARY
OPERV: DS OSMAX ;OPERATOR STACK
HIERV: DS OSMAX ;OPERATOR PRIORITY
VSTACK: DS VSMAX ;VALUE STACK
OSP: DS 1 ;OPERATOR STACK POINTER
VSP: DS 1 ;VALUE STACK POINTER
;
;
;
STKV: ;PLACE CURRENT H,L VALUE AT TOP OF VSTACK
XCHG ;HOLD VALUE IN D,E
LXI H,VSP
MOV A,M
CPI VSMAX
JC STKV0
CALL ERREX ;OVERFLOW IN EXPRESSION
MVI M,0 ;VSP=0
STKV0: MOV A,M ;GET VSP
INR M ;VSP=VSP+1
INR M ;VSP=VSP+2
MOV C,A ;SAVE VSP
MVI B,0 ;DOUBLE VSP
LXI H,VSTACK
DAD B
MOV M,E ;LOW BYTE
INX H
MOV M,D ;HIGH BYTE
RET
;
STKO: ;STACK OPERATOR (REG-A) AND PRIORITY (REG-B)
PUSH PSW ;SAVE IT
LXI H,OSP
MOV A,M
CPI OSMAX
JC STKO1
MVI M,0
CALL ERREX ;OPERATOR STACK OVERFLOW
STKO1: MOV E,M ;GET OSP
MVI D,0
INR M ;OSP=OSP+1
POP PSW ;RECALL OPERATOR
LXI H,OPERV
DAD D ;OPERV(OSP)
MOV M,A ;OPERV(OSP)=OPERATOR
LXI H,HIERV
DAD D
MOV M,B ;HIERV(OSP)=PRIORITY
RET
;
LODV1: ;LOAD TOP ELEMENT FROM VSTACK TO H,L
LXI H,VSP
MOV A,M
ORA A
JNZ LODOK
CALL ERREX ;UNDERFLOW
LXI H,0
RET
;
LODOK: DCR M
DCR M ;VSP=VSP-2
MOV C,M ;LOW BYTE
MVI B,0
LXI H,VSTACK
DAD B ;VSTACK(VSP)
MOV C,M ;GET LOW BYTE
INX H
MOV H,M
MOV L,C
RET
;
LODV2: ;LOAD TOP TWO ELEMENTS DE HOLDS TOP, HL HOLDS TOP-1
CALL LODV1
XCHG
CALL LODV1
RET
;
APPLY: ;APPLY OPERATOR IN REG-A TO TOP OF STACK
MOV L,A
MVI H,0
DAD H ;OPERATOR NUMBER*2
LXI D,OPTAB
DAD D ;INDEXED OPTAB
MOV E,M ;LOW ADDRESS
INX H
MOV H,M ;HIGH ADDRESS
MOV L,E
PCHL ;SET PC AND GO TO SUBROUTINE
;
OPTAB: DW MULOP
DW DIVOP
DW MODOP
DW SHLOP
DW SHROP
DW ADDOP
DW SUBOP
DW NEGOP
DW NOTOP
DW ANDOP
DW OROP
DW XOROP
DW ERREX ;(
;
; SPECIFIC HANDLERS FOLLOW
SHFT: ;SET UP OPERANDS FOR SHIFT L AND R
CALL LODV2
MOV A,D ;ENSURE 0-15
ORA A
JNZ SHERR
MOV A,E
CPI 17
RC ;RETURN IF 0-16 SHIFT
SHERR: CALL ERREX
MVI A,16
RET
;
NEGF: ;COMPUTE 0-H,L TO H,L
XRA A
SUB L
MOV L,A
MVI A,0
SBB H
MOV H,A
RET
;
DIVF: CALL LODV2
DIVE: ;(EXTERNAL ENTRY FROM MAIN PROGRAM)
XCHG ;SWAP D,E WITH H,L FOR DIVIDE FUNCTION
; COMPUTE X/Y WHERE X IS IN D,E AND Y IS IN H,L
; THE VALUE OF X/Y APPEARS IN D,E AND X MOD Y IS IN H,L
;
SHLD DTEMP ;SAVE X IN TEMPORARY
LXI H,BNUM ;STORE BIT COUNT
MVI M,11H
LXI B,0 ;INTIALIZE RESULT
PUSH B
XRA A ;CLEAR FLAGS
DLOOP:
MOV A,E ;GET LOW Y BYTE
RAL
MOV E,A
MOV A,D
RAL
MOV D,A
DCR M ;DECREMENT BIT COUNT
POP H ;RESTORE TEMP RESULT
RZ ;ZERO BIT COUNT MEANS ALL DONE
MVI A,0 ;ADD IN CARRY
ACI 0 ;CARRY
DAD H ;SHIFT TEMP RESULT LEFT ONE BIT
MOV B,H ;COPY HA AND L TO A A ND C
ADD L
LHLD DTEMP ;GET ADDRESS OF X
SUB L ;SUBTRACT FROM TEMPORARY RESULT
MOV C,A
MOV A,B
SBB H
MOV B,A
PUSH B ;SAVE TEMP RESULT IN STACK
JNC DSKIP ;NO BORROW FROM SUBTRACT
DAD B ;ADD X BACK IN
XTHL ;REPLACE TEMP RESULT ON STACK
DSKIP: LXI H,BNUM ;RESTORE H,L
CMC
JMP DLOOP ;REPEAT LOOP STEPS
;
DTEMP: DS 2
BNUM: DS 1
;
MULF: ;MULTIPLY D,E BY H,L AND REPLACE H,L WITH RESULT
MOV B,H
MOV C,L ;COPY OF 1ST VALUE TO B,C FOR SHIFT AND ADD
LXI H,0 ;H,L IS THE ACCUMULATOR
MUL0: XRA A
MOV A,B ;CARRY IS CLEARED
RAR
MOV B,A
MOV A,C
RAR
MOV C,A
JC MUL1 ;SKIP THIS ADD IF LSB IS ZERO
ORA B
RZ ;RETURN WITH H,L
JMP MUL2 ;SKIP ADD
MUL1: DAD D ;ADD CURRENT VALUE OF D
MUL2: XCHG ;READY FOR *2
DAD H
XCHG
JMP MUL0
;
MULOP: ;MULTIPLY D,E BY H,L
CALL LODV2
CALL MULF
JMP ENDOP
;
DIVOP: ;DIVIDE H,L BY D,E
CALL DIVF
XCHG ;RESULT TO H,L
JMP ENDOP
;
MODOP: CALL DIVF
JMP ENDOP
;
SHLOP: CALL SHFT ;CHECK VALUES
SHL0: ORA A ;DONE?
JZ ENDOP
DAD H ;HL=HL*2
DCR A
JMP SHL0
;
SHROP: CALL SHFT
SHR0: ORA A ;DONE?
JZ ENDOP
PUSH PSW ;SAVE CURRENT COUNT
XRA A
MOV A,H
RAR
MOV H,A
MOV A,L
RAR
MOV L,A
POP PSW
DCR A
JMP SHR0
;
ADDOP: CALL LODV2
ADD0: DAD D
JMP ENDOP
;
SUBOP: CALL LODV2
XCHG ;TREAT AS HL+(-DE)
CALL NEGF ;0-HL
JMP ADD0
;
NEGOP: CALL LODV1
NEG0: CALL NEGF ;COMPUTE 0-HL
JMP ENDOP
;
NOTOP: CALL LODV1
INX H ;65536-HL = 65535-(HL+1)
JMP NEG0
;
ANDOP: CALL LODV2
MOV A,D
ANA H
MOV H,A
MOV A,E
ANA L
MOV L,A
JMP ENDOP
;
OROP: CALL LODV2
MOV A,D
ORA H
MOV H,A
MOV A,E
ORA L
MOV L,A
JMP ENDOP
;
XOROP: CALL LODV2
MOV A,D
XRA H
MOV H,A
MOV A,E
XRA L
MOV L,A
;
ENDOP: JMP STKV
;
;
;
ENDEXP: ;RETURNS ZERO FLAG IF SYMBOL IS CR, ;, OR ,
LDA TOKEN
CPI SPECL
RNZ ;NOT END IF NOT SPECIAL
;
LDA ACCUM
CPI CR
RZ
CPI ';'
RZ
CPI ','
RZ
CPI '!'
RET
;
OPAND: ;SCAN THE OPERAND FIELD OF AN INSTRUCTION
; (NOT A DB WITH FIRST TOKEN STRING > 2 OR 0)
XRA A
STA OSP ;ZERO OPERATOR STACK POINTER
STA VSP
DCR A ;255
STA UNARY
LXI H,0
SHLD EVALUE
;
OP0: ;ARRIVE HERE WITH NEXT ITEM ALREADY SCANNED
CALL ENDEXP ;DONE?
JNZ OP1
; EMPTY THE OPERATOR STACK
EMPOP: LXI H,OSP
MOV A,M ;GET THE OSP AND CHECK FOR EMPTY
ORA A
JZ CHKVAL ;JUMP IF EMPTY
DCR M ;POP ELEMENT
MOV E,A ;COPY FOR DOUBLE ADD
DCR E
MVI D,0
LXI H,OPERV
DAD D ;INDEXED - OPERV(OSP)
MOV A,M ;GET OPERATOR
CALL APPLY ;APPLY OPERATOR
JMP EMPOP
;
CHKVAL:
LDA VSP ;MUST HAVE ONE ELEMENT IT THE STACK
CPI 2
CNZ ERREX
LDA PBUFF
CPI ' '
RNZ ;EVALUE REMAINS AT ZERO
LHLD VSTACK ;GET DOUBLE BYTE IN STACK
SHLD EVALUE
RET
;
OP1: ;MORE TO SCAN
LDA PBUFF
CPI ' '
JNZ GETOP
LDA TOKEN
CPI STRNG ;IS THIS A STRING?
JNZ OP3
;
; STRING - CONVERT TO DOUBLE PRECISION
LDA ACCLEN
ORA A
CZ ERREX ;ERROR IF LENGTH=0
CPI 3
CNC ERREX ;ERROR IF LENGTH>2
MVI D,0
LXI H,ACCUM
MOV E,M ;LSBYTE
INX H
DCR A ;A HAS THE LENGTH
JZ OP2 ;ONE OR TWO BYTES
MOV D,M ;FILL HIGH ORDER
OP2: XCHG ;VALUE TO H,L
JMP STNUM ;STORE TO STACK
;
OP3: ;NOT A STRING, CHECK FOR NUMBER
CPI NUMB
JNZ OP4
LHLD VALUE ;NUMERIC VALUE
JMP STNUM
;
OP4: ;NOT STRING OR NUMBER, MUST BE ID OR SPECL
CALL BGET ;BINARY SEARCH, GET ATTRIBUTES
JNZ OP6 ;MATCH?
; YES, MAY BE OPERATOR
CPI OPER+1
JNC OP5
; OPERATOR ENCOUNTERED MS NIBBLE OF B IS PRIORITY NUMBER LS NIBBLE
; IS THE OPERATOR
; ACC HAS THE OPERATOR NUMBER, B HAS PRIORITY
CPI LPAR ;(?
MOV C,A ;SAVE COPY OF OPERATOR NUMBER
LDA UNARY
JNZ OPER1 ;JUMP IF NOT A (
; ( ENCOUNTERED, UNARY MUST BE TRUE
ORA A
CZ ERREX
MVI A,0FFH
STA UNARY ;UNARY IS SET TRUE
MOV A,C ;RECOVER OPERATOR
JMP OPER4 ;CALLS STKO AND SETS UNARY TO TRUE
;
;
OPER1: ;NOT A LEFT PAREN
ORA A
JNZ OPER6 ;MUST BE + OR - SINCE UNARY IS SET
;
; UNARY NOT SET, MUST BE BINARY OPERATOR
OPER2: ;COMPARE HIERARCHY OF TOS
PUSH B ;SAVE PRIORITY AND OPERATOR NUMBER
LDA OSP
ORA A
JZ OPER3 ;NO MORE OPERATORS IN STACK
MOV E,A ;OSP TO E
DCR E ;OSP-1
MVI D,0
LXI H,HIERV
DAD D ;HL ADDRESSES TOP OF OPERATOR STACK
MOV A,M ;PRIORITY OF TOP OPERATOR
CMP B ;CURRENT GREATER?
JC OPER3 ;JUMP IF SO
; APPLY TOP OPERATOR TO VALUE STACK
LXI H,OSP
MOV M,E ;OSP=OSP-1
LXI H,OPERV
DAD D
MOV A,M ;OPERATOR NUMBER TO ACC
CALL APPLY
POP B ;RESTORE OPERATOR NUMBER AND PRIORITY
JMP OPER2 ;FOR ANOTHER TEST
;
OPER3: ;ARRIVE HERE WHEN OPERATOR IS STACKED
; CHECK FOR RIGHT PAREN BALANCE
POP B ;OPERATOR NUMBER IN C, PRIORITY IN B
MOV A,C
CPI RPAR
JNZ OPER4 ;JUMP IF NOT A RIGHT PAREN
;
; RIGHT PAREN FOUND, STACK MUST CONTAIN LEFT PAREN TO DELETE
LXI H,OSP
MOV A,M
ORA A ;ZERO?
JZ LPERR ;PAREN ERROR IF SO
DCR A ;OSP-1
MOV M,A ;STORED TO MEMORY
MOV E,A
MVI D,0
LXI H,OPERV
DAD D
MOV A,M ;TOP OPERATOR IN REG-A
CPI LPAR
JZ NLERR ;JMP IF NO ERROR - PARENS BALANCE
LPERR: CALL ERREX
NLERR: ;ERROR REPORTING COMPLETE
XRA A
JMP OPER5 ;TO CLEAR UNARY FLAG
;
OPER4: ;ORDINARY OPERATOR
CALL STKO
MVI A,0FFH ;TO SET UNARY FLAG
OPER5: STA UNARY
JMP GETOP ;FOR ANOTHER ELEMENT
;
OPER6: ;UNARY SET, MUST BE + OR -
MOV A,C ;RECALL OPERATOR
CPI PLUS
JZ GETOP ;IGNORE UNARY PLUS
CPI MINUS
JNZ CHKNOT
INR A ;CHANGE TO UNARY MINUS
MOV C,A
JMP OPER2
CHKNOT: ;UNARY NOT SYMBOL?
CPI NOTF
CNZ ERREX
JMP OPER2
;
;
OP5: ;ELEMENT FOUND IN TABLE, NOT AN OPERATOR
CPI PT ;PSEUDO OPERATOR?
CZ ERREX ;ERROR IF SO
MOV L,B ;GET LOW VALUE TO L
MVI H,0 ;ZERO HIGH ORDER BYTE
JMP STNUM ;STORE IT
;
OP6: ;NOT FOUND IN TABLE SCAN, $?
LDA TOKEN
CPI SPECL
JNZ OP7
LDA ACCUM
CPI '$'
JZ CURPC ;USE CURRENT PC
CALL ERREX
LXI H,0
JMP STNUM
CURPC: LHLD ASPC ;GET CURRENT PC
JMP STNUM
;
OP7: ;NOT $, LOOK IT UP
CALL LOOKUP
CALL FOUND
JNZ FIDENT
; NOT FOUND IN SYMBOL TABLE, ENTER IF PASS 1
MVI A,'P'
CALL PERR
CALL ENTER ;ENTER SYMBOL WITH ZERO TYPE FIELD
JMP FIDE0
FIDENT: CALL GETTY ;TYPE TO H,L
ANI 111B
MVI A,'U'
CZ PERR
;
FIDE0:
CALL GETVAL ;VALUE TO H,L
;
STNUM: ;STORE H,L TO VALUE STACK
LDA UNARY
ORA A ;UNARY OPERATION SET
CZ ERREX ;OPERAND ENCOUNTERED WITH UNARY OFF
XRA A
STA UNARY ;SET TO OFF
CALL STKV ;STACK THE VALUE
;
GETOP: CALL SCAN
JMP OP0
;
ERREX: ;PUT 'E' ERROR IN OUTPUT BUFFER
PUSH H
MVI A,'E'
CALL PERR
POP H
RET
;
ENDMOD EQU ($ AND 0FFE0H) + 20H ;NEXT HALF PAGE
END


View File

@@ -0,0 +1,895 @@
TITLE 'ASM MAIN MODULE'
; MP/M RESIDENT ASSEMBLER MAIN PROGRAM
;
; COPYRIGHT (C) 1976, 1977, 1978, 1979, 1980
; DIGITAL RESEARCH
; BOX 579, PACIFIC GROVE
; CALIFORNIA, 93950
;
; Revised:
; 20 Jan 80 by Thomas Rolander
;
;
org 0
base equ $
ORG 1BA0H
; MODULE ENTRY POINTS
IOMOD EQU base+200H ;IO MODULE
SCMOD EQU base+1100H ;SCANNER MODULE
SYMOD EQU base+1340H ;SYMBOL TABLE MODULE
BMOD EQU base+15A0H ;BINARY SEARCH MODULE
OPMOD EQU base+1860H ;OPERAND SCAN MODULE
;
SETUP EQU IOMOD+3H ;FILE SETUP FOR EACH PASS
PCON EQU IOMOD+12H ;WRITE CONSOLE BUFFER TO CR
WOBUFF EQU IOMOD+15H ;WRITE PRINT BUFFER AND REINITIALIZE
PERR EQU IOMOD+18H ;WRITE ERROR CHARACTER TO PRINT BUFFER
DHEX EQU IOMOD+1BH ;SEND HEX CHARACTER TO MACHINE CODE FILE
EOR EQU IOMOD+1EH ;END OF PROCESSING, CLOSE FILES AND TERMINATE
;
INITS EQU SCMOD+3H ;INITIALIZE SCANNER MODULE
SCAN EQU SCMOD+6H ;SCAN NEXT TOKEN
;
INISY EQU SYMOD+3H ;INITIALIZE SYMBOL TABLE
LOOKUP EQU SYMOD+6H ;LOOKUP SYMBOL IN ACCUMULATOR
FOUND EQU SYMOD+9H ;FOUND IF NZ FLAG
ENTER EQU SYMOD+0CH ;ENTER SYMBOL IN ACCUMULATOR
SETTY EQU SYMOD+0FH ;SET TYPE FIELD
GETTY EQU SYMOD+12H ;GET TYPE FIELD
SETVAL EQU SYMOD+15H ;SET VALUE FIELD
GETVAL EQU SYMOD+18H ;GET VALUE FIELD
;
BGET EQU BMOD+6H ;BINARY SEARCH AND GET TYPE/VALUE PAIR
;
OPAND EQU OPMOD+3H ;GET OPERAND VALUE TO 'EVALUE'
MULF EQU OPMOD+6H ;MULT D,E BY H,L TO H,L
DIVF EQU OPMOD+9H ;DIVIDE HL BY DE, RESULT TO DE
;
;
; COMMON EQUATES
PBMAX EQU 90 ;MAX PRINT SIZE
PBUFF EQU base+10CH ;PRINT BUFFER
PBP EQU PBUFF+PBMAX ;PRINT BUFFER POINTER
;
TOKEN EQU PBP+1 ;CURRENT TOKEN UDER SCAN
VALUE EQU TOKEN+1 ;VALUE OF NUMBER IN BINARY
ACCLEN EQU VALUE+2 ;ACCUMULATOR LENGTH
ACMAX EQU 64 ;MAX ACCUMULATOR LENGTH
ACCUM EQU ACCLEN+1
;
EVALUE EQU ACCUM+ACMAX ;VALUE FROM EXPRESSION ANALYSIS
;
SYTOP EQU EVALUE+2 ;CURRENT SYMBOL TOP
SYMAX EQU SYTOP+2 ;MAX ADDRESS+1
;
PASS EQU SYMAX+2 ;CURRENT PASS NUMBER
FPC EQU PASS+1 ;FILL ADDRESS FOR NEXT HEX BYTE
ASPC EQU FPC+2 ;ASSEMBLER'S PSEUDO PC
SYBAS EQU ASPC+2 ;BASE OF SYMBOL TABLE
SYADR EQU SYBAS+2 ;CURRENT SYMBOL ADDRESS
;
; GLOBAL EQUATES
IDEN EQU 1 ;IDENTIFIER
NUMB EQU 2 ;NUMBER
STRNG EQU 3 ;STRING
SPECL EQU 4 ;SPECIAL CHARACTER
;
PLABT EQU 0001B ;PROGRAM LABEL
DLABT EQU 0010B ;DATA LABEL
EQUT EQU 0100B ;EQUATE
SETT EQU 0101B ;SET
MACT EQU 0110B ;MACRO
;
EXTT EQU 1000B ;EXTERNAL
REFT EQU 1011B ;REFER
GLBT EQU 1100B ;GLOBAL
;
CR EQU 0DH ;CARRIAGE RETURN
LF EQU 0AH ;LINE FEED
EOF EQU 1AH ;END OF FILE
NBMAX EQU 16 ;STARTING POSITION OF PRINT LINE
;
;
RT EQU 16 ;REGISTER TYPE
PT EQU RT+1 ;PSEUDO OPERATION
PENDIF EQU 5 ;PSEUDO OPERATOR 'ENDIF'
OBASE EQU PT+1
O1 EQU OBASE+1 ;FIRST OPERATOR
O15 EQU OBASE+15;LAST OPERATOR
;
; MAIN STATEMENT PROCESSING LOOP
XRA A
STA PASS ;SET TO PASS 0 INITIALLY
CALL INISY ;INITIALIZE THE SYMBOL TABLE
RESTART: ;PASS LOOP GOES FROM 0 TO 1
CALL INITS ;INITIALIZE THE SCANNER
CALL SETUP ;SET UP THE INPUT FILE
LXI H,0
SHLD SYLAB ;ASSUME NO STARTING LABEL
SHLD FPC
SHLD ASPC
SHLD EPC ;END PC
;
SCNEXT: ;SCAN THE NEXT INPUT ITEM
CALL SCAN
SCN0: LDA TOKEN
CPI NUMB ;SKIP LEADING NUMBERS FROM LINE EDITORS
JZ SCNEXT
CPI SPECL ;MAY BE PROCESSOR TECH'S COMMENT
JNZ SCN1
; SPECIAL CHARACTER, CHECK FOR *
LDA ACCUM
CPI '*'
JNZ CHEND ;END OF LINE IF NOT *
; * FOUND, NO PRECEDING LABEL ALLOWED
CALL SETLA
JNZ STERR ;ERROR IF LABEL
JMP CHEN1 ;SCAN THE COMMENT OTHERWISE
;
SCN1: ;NOT NUMBER OR SPECIAL CHARACTER, CHECK FOR IDENTIFIER
CPI IDEN
JNZ STERR ;ERROR IF NOT
;
; IDENTIFIER FOUND, MAY BE LABEL, OPCODE, OR MACRO
CALL BGET ;BINARY SEARCH FIXED DATA
JZ CHKPT ;CHECK FOR PSEUDO OR REAL OPERATOR
;
; BINARY SEARCH WAS UNSUCCESSFUL, CHECK FOR MACRO
CALL LOOKUP
CALL FOUND
JNZ LFOUN ;NZ FLAG SET IF FOUND
;
; NOT FOUND, ENTER IT
CALL ENTER ;THIS MUST BE PASS 0
LDA PASS
ORA A
CNZ ERRP ;PHASE ERROR IF NOT
JMP SETSY ;SET SYLAB
;
; ITEM WAS FOUND, CHECK FOR MACRO
LFOUN: CALL GETTY
CPI MACT
JNZ SETSY
;
; MACRO DEFINITION FOUND, EXPAND MACRO
CALL ERRN ;NOT CURRENTLY IMPLEMENTED
JMP CHEN1 ;SCANS TO END OF CURRENT LINE
;
SETSY: ;LABEL FOUND - IS IT THE ONLY ONE?
LHLD SYLAB
MOV A,L
ORA H
CNZ ERRL ;LABEL ERROR IF NOT
LHLD SYADR ;ADDRESS OF SYMBOL
SHLD SYLAB ;MARK AS LABEL FOUND
;
; LABEL FOUND, SCAN OPTIONAL ':'
CALL SCAN
LDA TOKEN
CPI SPECL
JNZ SCN0 ;SKIP NEXT SCAN IF NOT SPECIAL
LDA ACCUM
CPI ':'
JNZ SCN0
JMP SCNEXT ;TO IGNORE ':'
;
; BINARY SEARCH FOUND SYMBOL, CHECK FOR PSEUDO OR REAL OP
CHKPT: CPI PT ;PSEUDO OPCODE?
JNZ CHKOT
;
; PSEUDO OPCODE FOUND, BRANCH TO CASES
MOV E,B ;B HAS PARTICULAR OPERATOR NUMBER
MVI D,0 ;DOUBLE PRECISION VALUE TO D,E
DCX D ;BIASED BY +1
LXI H,PTTAB ;BASE OF JUMP TABLE
DAD D
DAD D
MOV E,M
INX H
MOV H,M
MOV L,E
PCHL ;JUMP INTO TABLE
;
PTTAB: ;PSEUDO OPCODE JUMP TABLE
DW SDB ;DB
DW SDS ;DS
DW SDW ;DW
DW SEND ;END
DW SENDIF ;ENDIF
DW SENDM ;ENDM
DW SEQU ;EQU
DW SIF ;IF
DW SMACRO ;MACRO
DW SORG ;ORG
DW SSET ;SET
DW STITLE ;TITLE
;
SDB:
CALL FILAB ;SET LABEL FOR THIS LINE TO ASPC
SDB0:
CALL SCAN ;PAST DB TO NEXT ITEM
LDA TOKEN ;LOOK FOR LONG STRING
CPI STRNG
JNZ SDBC ;SKIP IF NOT STRING
LDA ACCLEN
DCR A ;LENGTH 1 STRING?
JZ SDBC
; LENGTH 0,2,... STRING
MOV B,A
INR B
INR B ;BECOMES 1,3,... FOR 0,2,... LENGTHS
LXI H,ACCUM ;ADDRESS CHARACTERS IN STRING
SDB1: DCR B ;COUNT DOWN TO ZERO
JZ SDB2 ;SCAN DELIMITER AT END OF STRING
PUSH B ;SAVE COUNT
MOV B,M ;GET CHARACTER
INX H
PUSH H ;SAVE ACCUM POINTER
CALL FILHB ;SEND TO HEX FILE
POP H
POP B
JMP SDB1
SDB2: CALL SCAN ;TO THE DELIMITER
JMP SDB3
;
; NOT A LONG STRING
SDBC: CALL OPAND ;COMPUTE OPERAND
LHLD EVALUE ;VALUE TO H,L
MOV A,H
ORA A ;HIGH ORDER MUST BE ZERO
CNZ ERRD ;DATA ERROR
MOV B,L ;GET LOW BYTE
CALL FILHB
SDB3: ;END OF ITEM - UPDATE ASPC
CALL SETAS ;SET ASPC TO FPC
CALL DELIM
CPI ','
JZ SDB0 ;FOR ANOTHER ITEM
JMP CHEND ;CHECK END OF LINE SYNTAX
;
SDS:
CALL FILAB ;HANDLE LABEL IF IT OCCURRED
CALL PADD ;PRINT ADDRESS
CALL EXP16 ;SCAN AND GET 16BIT OPERAND
XCHG ;TO D,E
LHLD ASPC ;CURRENT PSEUDO PC
DAD D ;+EXPRESSION
SHLD ASPC
SHLD FPC ;NEXT TO FILL
JMP CHEND
;
SDW:
CALL FILAB ;HANDLE OPTIONAL LABEL
SDW0:
CALL EXP16 ;GET 16BIT OPERAND
PUSH H ;SAVE A COPY
MOV B,L ;LOW BYTE FIRST
CALL FILHB ;SEND LOW BYTE
POP H ;RECLAIM A COPY
MOV B,H ;HIGH BYTE NEXT
CALL FILHB ;SEND HIGH BYTE
CALL SETAS ;SET ASPC=FPC
CALL DELIM ;CHECK DELIMITER SYNTAX
CPI ','
JZ SDW0 ;GET MORE DATA
JMP CHEND
;
SEND:
CALL FILAB
CALL PADD ;WRITE LAST LOC
LDA PBUFF
CPI ' '
JNZ CHEND
CALL EXP16 ;GET EXPRESSION IF IT'S THERE
LDA PBUFF
CPI ' '
JNZ SEND0
SHLD EPC ;EXPRESSION FOUND, STORE IT FOR LATER
SEND0: MVI A,' '
STA PBUFF ;CLEAR ERROR, IF IT OCCURRED
CALL SCAN ;CLEAR CR
LDA TOKEN
CPI SPECL
JNZ STERR
LDA ACCUM
CPI LF
JNZ STERR
JMP ENDAS ;END OF ASSEMBLER
;
SENDIF:
JMP POEND
;
SENDM:
CALL ERRN
JMP POEND
;
SEQU:
CALL SETLA
JZ STERR ;MUST BE A LABEL
LHLD ASPC ;HOLD TEMP ASPC
PUSH H ;IN STACK
CALL EXP16 ;GET 16BIT OPERAND
SHLD ASPC ;VALUE OF EXPRESSION
CALL FILAB
CALL PADDR ;COMPUTED VALUE
LXI H,PBUFF+6 ;SPACE AFTER VALUE
MVI M,'='
POP H ;REAL ASPC
SHLD ASPC ;CHANGE BACK
JMP CHEND
;
SIF:
CALL FILAB ;IN CASE OF LABEL
CALL EXP16 ;GET IF EXPRESSION
LDA PBUFF
CPI ' '
JNZ CHEND ;SKIP IF ERROR
MOV A,L ;GET LSB
RAR
JC CHEND ;TRUE IF CARRY BIT SET
;
; SKIP TO EOF OR ENDIF
SIF0: CALL SCAN
LDA TOKEN
CPI SPECL
JNZ SIF1
LDA ACCUM
CPI EOF
MVI A,'B' ;BALANCE ERROR
CZ PERR
JZ ENDAS
JMP SIF0 ;FOR ANOTHER
SIF1: ;NOT A SPECIAL CHARACTER
CPI IDEN
JNZ SIF0 ;NOT AN IDENTIFIER
CALL BGET ;LOOK FOR ENDIF
JNZ SIF0 ;NOT FOUND
CPI PT ;PSEUDO OP?
JNZ SIF0
MOV A,B ;GET OPERATOR NUMBER
CPI PENDIF ;ENDIF?
JNZ SIF0 ;GET ANOTHER TOKEN
JMP POEND ;OK, CHECK END OF LINE
;
SMACRO:
CALL ERRN
JMP CHEND
;
SORG:
CALL EXP16
LDA PBUFF
CPI ' '
JNZ CHEND ;SKIP ORG IF ERROR
SHLD ASPC ;CHANGE PC
SHLD FPC ;CHANGE NEXT TO FILL
CALL FILAB ;IN CASE OF LABEL
CALL PADD
JMP CHEND
;
SSET:
CALL SETLA
JZ STERR ;MUST BE LABELLED
;
CALL GETTY
CPI SETT
CNZ ERRL ;LABEL ERROR
MVI A,SETT
CALL SETTY ;REPLACE TYPE WITH 'SET'
CALL EXP16 ;GET THE EXPRESSION
PUSH H ;SAVE IT
CALL SETLA ;RE-ADDRESS LABEL
POP H ;RECLAIM IT
CALL SETVAL
LXI H,0
SHLD SYLAB ;PREVENT LABEL PROCESSING
JMP CHEND
;
;
STITLE:
CALL ERRN ;NOT IMPLEMENTED
;
POEND: ;PSEUDO OPERATOR END - SCAN TO NEXT TOKEN
CALL SCAN
JMP CHEND
;
; NOT A PSEUDO OPCODE, CHECK FOR REAL OPCODE
CHKOT: SUI O1 ;BASE OF OPCODES
CPI O15 ;PAST LAST OPCODE?
JNC STERR ;STATEMENT ERROR IF SO
;
; FOUND OPCODE, COMPUTE INDEX INTO TABLE AND JUMP TO CASE
MOV E,A
MVI D,0
LXI H,OPTAB
DAD D
DAD D
MOV E,M
INX H
MOV H,M
MOV L,E
PCHL ;JUMP TO CASE
;
OPTAB: ;OPCODE CATEGORIES
DW SSIMP ;SIMPLE
DW SLXI ;LXI
DW SDAD ;DAD
DW SPUSH ;PUSH/POP
DW SJMP ;JMP/CALL
DW SMOV ;MOV
DW SMVI ;MVI
DW SACCI ;ACCUM IMMEDIATE
DW SLDAX ;LDAX/STAX
DW SLHLD ;LHLD/SHLD/LDA/STA
DW SACCR ;ACCUM-REGISTER
DW SINC ;INC/DCR
DW SINX ;INX/DCX
DW SRST ;RESTART
DW SIN ;IN/OUT
;
SSIMP: ;SIMPLE OPERATION CODES
CALL FILHB ;SEND HEX VALUE TO MACHINE CODE FILE
CALL SCAN ;TO NEXT TOKEN
JMP INCPC
;
SLXI: ;LXI H,16B
CALL SHDREG ;SCAN DOUBLE PRECISION REGISTER
CALL CHCOM ;CHECK FOR COMMA FOLLOWING REGISTER
CALL SETADR ;SCAN AND EMIT DOUBLE PRECISION OPERAND
JMP INCPC
;
SDAD: ;DAD B
CALL SHDREG ;SCAN AND EMIT DOUBLE PRECISION REGISTER
JMP INCPC
;
SPUSH: ;PUSH B POP D
CALL SHREG ;SCAN SINGLE PRECISION REGISTER TO A
CPI 111000B ;MAY BE PSW
JZ SPU0
; NOT PSW, MUST BE B,D, OR H
ANI 001000B ;LOW BIT MUST BE 0
CNZ ERRR ;REGISTER ERROR IF NOT
SPU0: MOV A,C ;RECALL REGISTER AND MASK IN CASE OF ERROR
ANI 110000B
ORA B ;MASK IN OPCODE FOR PUSH OR POP
JMP FILINC ;FILL HEX VALUE AND INCREMENT PC
;
SJMP: ;JMP 16B/ CALL 16B
CALL FILHB ;EMIT JMP OR CALL OPCODE
CALL SETADR ;EMIT 16BIT OPERAND
JMP INCPC
;
SMOV: ;MOV A,B
CALL SHREG
ORA B ;MASK IN OPCODE
MOV B,A ;SAVE IN B TEMPORARILY
CALL CHCOM ;MUST BE COMMA SEPARATOR
CALL EXP3 ;VALUE MUST BE 0-7
ORA B ;MASK IN OPCODE
JMP FILINC
;
SMVI: ;MVI A,8B
CALL SHREG
ORA B ;MASK IN OPCODE
CALL FILHEX ;EMIT OPCODE
CALL CHCOM ;SCAN COMMA
CALL SETBYTE ;EMIT 8BIT VALUE
JMP INCPC
;
SACCI: ;ADI 8B
CALL FILHB ;EMIT IMMEDIATE OPCODE
CALL SETBYTE ;EMIT 8BIT OPERAND
JMP INCPC
;
SLDAX: ;LDAX B/STAX D
CALL SHREG
ANI 101000B ;MUST BE B OR D
CNZ ERRR ;REGISTER ERROR IF NOT
MOV A,C ;RECOVER REGISTER NUMBER
ANI 010000B ;CHANGE TO B OR D IF ERROR
ORA B ;MASK IN OPCODE
JMP FILINC ;EMIT OPCODE
;
SLHLD: ;LHLD 16B/ SHLD 16B/ LDA 16B/ STA 16B
CALL FILHB ;EMIT OPCODE
CALL SETADR ;EMIT OPERAND
JMP INCPC
;
SACCR: ;ADD B
CALL EXP3 ;RIGHT ADJUSTED 3BIT VALUE FOR REGISTER
ORA B ;MASK IN OPCODE
JMP FILINC
;
SINC: ;INR B/DCR D
CALL SHREG ;GET REGISTER
ORA B
JMP FILINC
;
SINX: ;INX H/DCX B
CALL SHREG
ANI 001000B ;MUST BE B D M OR SP
CNZ ERRR ;REGISTER ERROR IF NOT
MOV A,C ;RECOVER REGISTER
ANI 110000B ;IN CASE OF ERROR
ORA B ;MASK IN OPCODE
JMP FILINC
;
SRST: ;RESTART 4
CALL SHREG ;VALUE IS 0-7
ORA B ;OPCODE MASKED
JMP FILINC
;
SIN: ;IN 8B/OUT 8B
CALL FILHB ;EMIT OPCODE
CALL SETBYTE ;EMIT 8BIT OPERAND
JMP INCPC
;
FILINC: ;FILL HEX VALUE FROM A BEFORE INCREMENTING PC
CALL FILHEX
;
INCPC: ;CHANGE ASSEMBLER'S PSEUDO PROGRAM COUNTER
CALL FILAB ;SET ANY LABELS WHICH OCCUR ON THE LINE
CALL SETAS ;ASPC=FPC
JMP CHEND ;END OF LINE SCAN
;
;
; UTILITY SUBROUTINES FOR OPERATION CODES
;
DELIM: ;CHECK DELIMITER SYNTAX FOR DATA STATEMENTS
LDA TOKEN
CPI SPECL
CNZ ERRD
LDA ACCUM
CPI ','
RZ
CPI ';'
RZ
CPI CR
CNZ ERRD
RET
;
EXP16: ;GET 16BIT VALUE TO H,L
PUSH B
CALL SCAN ;START SCANNING OPERAND FIELD
CALL OPAND
LHLD EVALUE ;VALUE TO H,L
POP B
RET
;
EXP8: ;GET 8BIT VALUE TO REG A
CALL EXP16
MOV A,H
ORA A
CNZ ERRV ;VALUE ERROR IF HIGH BYTE NOT ZERO
MOV A,L
RET
;
EXP3: ;GET 3BIT VALUE TO REG A
CALL EXP8
CPI 8
CNC ERRV ;VALUE ERROR IF >=8
ANI 111B ;REDUCE IF ERROR OCCURS
RET
;
SHREG: ;GET 3BIT VALUE AND SHIFT LEFT BY 3
CALL EXP3
RAL
RAL
RAL
ANI 111000B
MOV C,A ;COPY TO C
RET
;
SHDREG: ;GET DOUBLE REGISTER TO A
CALL SHREG
ANI 001000B ;CHECK FOR A,C,E, OR L
CNZ ERRR ;REGISTER ERROR
MOV A,C ;RECOVER REGISTER
ANI 110000B ;FIX IT IF ERROR OCCURRED
ORA B ;MASK OPCODE
JMP FILHEX ;EMIT IT
;
SETBYTE: ;EMIT 16BIT OPERAND
CALL EXP8
JMP FILHEX
;
SETADR: ;EMIT 16BIT OPERAND
CALL EXP16
JMP FILADR
;
CHCOM: ;CHECK FOR COMMA FOLLOWING EXPRESSION
PUSH PSW
PUSH B
LDA TOKEN
CPI SPECL
JNZ COMER
; SPECIAL CHARACTER, CHECK FOR COMMA
LDA ACCUM
CPI ','
JZ COMRET ;RETURN IF COMMA FOUND
COMER: ;COMMA ERROR
MVI A,'C'
CALL PERR
COMRET:
POP B
POP PSW
RET
;
CHEND: ;END OF LINE CHECK
CALL FILAB ;IN CASE OF A LABEL
LDA TOKEN
CPI SPECL
JNZ STERR ;MUST BE A SPECIAL CHARACTER
LDA ACCUM
CPI CR ;CARRIAGE RETURN
JNZ CHEN0
; CARRIAGE RETURN FOUND, SCAN PICKS UP LF AND PUSHES LINE
CALL SCAN
JMP SCNEXT
;
CHEN0: ;NOT CR, CHECK FOR COMMENT
CPI ';'
JNZ CHEN2
CALL FILAB ;IN CASE LABELLED EMPTY LINE
; CLEAR COMMENT TO END OF LINE
CHEN1: CALL SCAN
LDA TOKEN
CPI SPECL
JNZ CHEN1
LDA ACCUM
CPI LF
JZ SCNEXT
CPI EOF
JZ ENDAS ;END OF ASSEMBLY IF EOF
CPI '!'
JZ SCNEXT ;LOGICAL END OF LINE
JMP CHEN1 ;NONE OF THE ABOVE
;
; NOT CR OR LF, MAY BE LOGICAL END OF LINE
CHEN2: CPI '!'
JZ SCNEXT
CPI EOF
JZ ENDAS
;
; STATEMENT ERROR IN OPERAND FIELD
STERR: MVI A,'S'
CALL PERR
JMP CHEN1 ;TO DUMP LINE
;
DIFF: ;COMPUTE DE-HL TO HL
MOV A,E
SUB L
MOV L,A
MOV A,D
SBB H
MOV H,A
RET
;
ENDAS: ;END OF ASSEMBLY FOR THIS PASS
LXI H,PASS
MOV A,M
INR M ;PASS NUMBER INCREMENTED
ORA A
JZ RESTART
CALL SCAN ;TO CLEAR LAST LINE FEED
CALL PADD ;WRITE LAST ADDRESS
LXI H,PBUFF+5
MVI M,CR ;SET TO CR FOR END OF MESSAGE
LXI H,PBUFF+1
CALL PCON ;PRINT LAST ADDRESS
;
; COMPUTE REMAINING SPACE
LHLD SYTOP
XCHG
LHLD SYBAS
CALL DIFF ;DIFFERENCE TO H,L
PUSH H ;SYTOP-SYBAS TO STACK
LHLD SYMAX
XCHG
LHLD SYBAS
CALL DIFF ;SYMAX-SYBAS TO H,L
MOV E,H
MVI D,0 ;DIVIDED BY 256
POP H ;SYTOP-SYBAS TO H,L
CALL DIVF ;RESULT TO DE
XCHG
CALL PADDR ;PRINT H,L TO PBUFF
LXI H,PBUFF+5 ;MESSAGE
LXI D,EMSG ;END MESSAGE
ENDA0: LDAX D
ORA A ;ZERO?
JZ ENDA1
MOV M,A
INX H
INX D
JMP ENDA0
;
EMSG: DB 'H USE FACTOR',CR,0
;
ENDA1: LXI H,PBUFF+2 ;BEGINNING OF RATIO
CALL PCON
LHLD EPC
SHLD FPC ;END PROGRAM COUNTER
JMP EOR
;
; UTILITY SUBROUTINES
COMDH: ;COMPARE D,E WITH H,L FOR EQUALITY (NZ FLAG IF NOT EQUAL)
MOV A,D
CMP H
RNZ
MOV A,E
CMP L
RET
;
SETAS: ;ASPC=FPC
LHLD FPC
SHLD ASPC
RET
;
SETLA: ;SYADR=SYLAB, FOLLOWED BY CHECK FOR ZERO
LHLD SYLAB
SHLD SYADR
CALL FOUND
RET
;
FILAB: ;FILL LABEL VALUE WITH CURRENT ASPC, IF LABEL FOUND
CALL SETLA
RZ ;RETURN IF NO LABEL DETECTED
;
; LABEL FOUND, MUST BE DEFINED ON PASS-1
LXI H,0
SHLD SYLAB ;TO MARK NEXT STATEMENT WITH NO LABEL
LDA PASS
ORA A
JNZ FIL1
;
; PASS 0
CALL GETTY
PUSH PSW ;SAVE A COPY OF TYPE
ANI 111B ;CHECK FOR UNDEFINED
CNZ ERRL ;LABEL ERROR
POP PSW ;RESTORE TYPE
ORI PLABT ;SET TO LABEL TYPE
CALL SETTY ;SET TYPE FIELD
LHLD ASPC ;GET CURRENT PC
CALL SETVAL ;PLACE INTO VALUE FIELD
RET
;
FIL1: ;CHECK FOR DEFINED VALUE
CALL GETTY
ANI 111B
CZ ERRP ;PHASE ERROR
; GET VALUE AND COMPARE WITH ASPC
CALL GETVAL ;TO H,L
XCHG
LHLD ASPC
CALL COMDH
CNZ ERRP ;PHASE ERROR IF NOT THE SAME
RET
;
FILHEX: ;WRITE HEX BYTE IN REGISTER A TO MACHINE CODE FILE IF PASS-1
MOV B,A
FILHB: LDA PASS
ORA A
MOV A,B
JZ FILHI
;
; PASS - 1, WRITE HEX AND PRINT DATA
PUSH B ;SAVE A COPY
CALL DHEX ;INTO MACHINE CODE FILE
; MAY BE COMPLETELY EMPTY LINE, SO CHECK ADDRESS
LDA PBUFF+1
CPI ' '
LHLD ASPC
CZ PADDR ;PRINT ADDRESS FIELD
;
LDA NBP
CPI NBMAX ;TRUNCATE CODE IF TOO MUCH ON THIS LINE
POP B ;RECALL HEX DIGIT
JNC FILHI
; ROOM FOR DIGIT ON THIS LINE
MOV A,B
CALL WHEXB ;WRITE HEX BYTE TO PRINT LINE
FILHI: LHLD FPC
INX H
SHLD FPC ;READY FOR NEXT BYTE
RET
;
FILADR: ;EMIT DOUBLE PRECISION VALUE FROM H,L
PUSH H ;SAVE A COPY
MOV B,L
CALL FILHB ;LOW BYTE EMITTED
POP H ;RECOVER A COPY OF H,L
MOV B,H
JMP FILHB ;EMIT HIGH BYTE AND RETURN
;
; UTILITY FUNCTIONS FOR PRINTING HEX ADDRESSES AND DATA
CHEX: ;CONVERT TO HEX
ADI '0'
CPI '0'+10
RC
ADI 'A'-'0'-10
RET
;
WHEXN: ;WRITE HEX NIBBLE
CALL CHEX ;CONVERT TO ASCII FROM HEX
LXI H,NBP
MOV E,M ;NEXT POSITION TO PRINT
MVI D,0 ;DOUBLE PRECISION
INR M ;NBP=NBP+1
LXI H,PBUFF
DAD D
MOV M,A ;STORE IN PRINT BUFFER
RET
;
WHEXB: ;WRITE HEX BYTE TO PRINT BUFFER
PUSH PSW
RAR
RAR
RAR
RAR
ANI 0FH ;HIGH ORDER NIBBLE NORMALIZE IN A
CALL WHEXN ;WRITE IT
POP PSW
ANI 0FH
JMP WHEXN ;WRITE AND RETURN
;
PADD: LHLD ASPC
PADDR: ;PRINT ADDRESS FIELD OF PRINT LINE FROM H,L
XCHG
LXI H,NBP ;INITIALIZE NEXT TO FILL
PUSH H ;SAVE A COPY OF NBP'S ADDRESS
MVI M,1
MOV A,D ;PRINT HIGH BYTE
PUSH D ;SAVE A COPY
CALL WHEXB
POP D
MOV A,E
CALL WHEXB
POP H ;ADDRESSING NBP
INR M ;SKIP A SPACE AFTER ADDRESS FIELD
RET
;
ERRR: ;EMIT REGISTER ERROR
PUSH PSW
PUSH B
MVI A,'R'
CALL PERR
POP B
POP PSW
RET
;
ERRV: ;EMIT VALUE ERROR
PUSH PSW
PUSH H
MVI A,'V'
CALL PERR
POP H
POP PSW
RET
;
ERRD: PUSH PSW
MVI A,'D' ;DATA ERROR
JMP ERR
;
ERRP: PUSH PSW
MVI A,'P'
JMP ERR
;
ERRL: PUSH PSW
MVI A,'L' ;LABEL ERROR
JMP ERR
;
ERRN: PUSH PSW
MVI A,'N' ;NOT IMPLEMENTED
;
ERR:
CALL PERR
POP PSW
RET
;
SYLAB: DS 2 ;ADDRESS OF LINE LABEL
EPC: DS 2 ;END PC VALUE
NBP: DS 1 ;NEXT BYTE POSITION TO WRITE FOR MACHINE CODE
END


View File

@@ -0,0 +1,23 @@
mac b:as0com $$pzsz
mac b:as1io $$pzsz
mac b:as2scan $$pzsz
mac b:as3sym $$pzsz
pip b:as00.hex=b:as0com.hex[i],b:as1io.hex[i],b:as2scan.hex[i],b:as3sym.hex[h]
mac b:as0com $$pzsz+r
mac b:as1io $$pzsz+r
mac b:as2scan $$pzsz+r
mac b:as3sym $$pzsz+r
pip b:as01.hex=b:as0com.hex[i],b:as1io.hex[i],b:as2scan.hex[i],b:as3sym.hex[h]
mac b:as4sear $$pzsz
mac b:as5oper $$pzsz
mac b:as6main $$pzsz
pip b:as10.hex=b:as4sear.hex[i],b:as5oper.hex[i],b:as6main.hex[h]
mac b:as4sear $$pzsz+r
mac b:as5oper $$pzsz+r
mac b:as6main $$pzsz+r
pip b:as11.hex=b:as4sear.hex[i],b:as5oper.hex[i],b:as6main.hex[h]
pip b:as0.hex=b:as00.hex[i],b:as10.hex[h]
pip b:as1.hex=b:as01.hex[i],b:as11.hex[h]
pip b:asm.hex=b:as0.hex,b:as1.hex
genmod b:asm.hex b:asm.prl $$1000


View File

@@ -0,0 +1,8 @@
mac b:as0com $$pp+shz
mac b:as1io $$pp+shz
mac b:as2scan $$pp+shz
mac b:as3sym $$pp+shz
mac b:as4sear $$pp+shz
mac b:as5oper $$pp+shz
mac b:as6main $$pp+shz


View File

@@ -0,0 +1,33 @@
mac b:ddt1asm $$pp+s
era b:ddt1asm0.hex
ren b:ddt1asm0.hex=b:ddt1asm.hex
mac b:ddt1asm $$pzsz+r
era b:ddt1asm1.hex
ren b:ddt1asm1.hex=b:ddt1asm.hex
mac b:ddt2mon $$pp+s
era b:ddt2mon0.hex
ren b:ddt2mon0.hex=b:ddt2mon.hex
mac b:ddt2mon $$pzsz+r
era b:ddt2mon1.hex
ren b:ddt2mon1.hex=b:ddt2mon.hex
pip b:relddt0.hex=b:ddt1asm0.hex[i],b:ddt2mon0.hex[h]
pip b:relddt1.hex=b:ddt1asm1.hex[i],b:ddt2mon1.hex[h]
pip b:relddt.hex=b:relddt0.hex,b:relddt1.hex
genmod b:relddt.hex b:relddt.com
genhex b:relddt 100
era b:relddt0.hex
ren b:relddt0.hex=b:relddt.hex
genhex b:relddt 200
era b:relddt1.hex
ren b:relddt1.hex=b:relddt.hex
mac b:ddt0mov $$pp+s
era b:ddt0mov0.hex
ren b:ddt0mov0.hex=b:ddt0mov.hex
mac b:ddt0mov $$pzsz+r
era b:ddt0mov1.hex
ren b:ddt0mov1.hex=b:ddt0mov.hex
pip b:relddt0.hex=b:relddt0.hex[i],b:ddt0mov0.hex[h]
pip b:relddt1.hex=b:relddt1.hex[i],b:ddt0mov1.hex[h]
pip b:relddt.hex=b:relddt0.hex,b:relddt1.hex
genmod b:relddt.hex b:rdt.prl $$z1500


View File

@@ -0,0 +1,101 @@
TITLE 'DDT RELOCATOR PROGRAM'
; DDT RELOCATOR PROGRAM, INCLUDED WITH THE MODULE TO PERFORM
; THE MOVE FROM 200H TO THE DESTINATION ADDRESS
VERSION EQU 11 ;1.1
;
; COPYRIGHT (C) 1976, 1977, 1978, 1979, 1980
; DIGITAL RESEARCH
; BOX 579 PACIFIC GROVE
; CALIFORNIA 93950
;
; Revised:
; 20 Jan 80 Thomas Rolander
org 0
base equ $
ORG 100H
STACK EQU base+200H
BDOS EQU base+05H
PRNT EQU 9 ;BDOS PRINT FUNCTION
MODULE EQU base+200H ;MODULE ADDRESS
;
; LXI B,0 ;ADDRESS FIELD FILLED-IN WHEN MODULE BUILT
db 01h
org 103h
JMP START
DB 'COPYRIGHT (C) 1980, DIGITAL RESEARCH '
SIGNON: DB '[MP/M] DDT VERS '
DB VERSION/10+'0','.'
DB VERSION MOD 10 + '0','$'
START: LXI SP,STACK
PUSH B
PUSH B
LXI D,SIGNON
MVI C,PRNT
CALL BDOS
POP B ;RECOVER LENGTH OF MOVE
LXI H,BDOS+2;ADDRESS FIELD OF JUMP TO BDOS (TOP MEMORY)
MOV A,M ;A HAS HIGH ORDER ADDRESS OF MEMORY TOP
DCR A ;PAGE DIRECTLY BELOW BDOS
SUB B ;A HAS HIGH ORDER ADDRESS OF RELOC AREA
MOV D,A
MVI E,0 ;D,E ADDRESSES BASE OF RELOC AREA
PUSH D ;SAVE FOR RELOCATION BELOW
;
LXI H,MODULE;READY FOR THE MOVE
MOVE: MOV A,B ;BC=0?
ORA C
JZ RELOC
DCX B ;COUNT MODULE SIZE DOWN TO ZERO
MOV A,M ;GET NEXT ABSOLUTE LOCATION
STAX D ;PLACE IT INTO THE RELOC AREA
INX D
INX H
JMP MOVE
;
RELOC: ;STORAGE MOVED, READY FOR RELOCATION
; HL ADDRESSES BEGINNING OF THE BIT MAP FOR RELOCATION
POP D ;RECALL BASE OF RELOCATION AREA
POP B ;RECALL MODULE LENGTH
PUSH H ;SAVE BIT MAP BASE IN STACK
MOV H,D ;RELOCATION BIAS IS IN D
;
REL0: MOV A,B ;BC=0?
ORA C
JZ ENDREL
;
; NOT END OF THE RELOCATION, MAY BE INTO NEXT BYTE OF BIT MAP
DCX B ;COUNT LENGTH DOWN
MOV A,E
ANI 111B ;0 CAUSES FETCH OF NEXT BYTE
JNZ REL1
; FETCH BIT MAP FROM STACKED ADDRESS
XTHL
MOV A,M ;NEXT 8 BITS OF MAP
INX H
XTHL ;BASE ADDRESS GOES BACK TO STACK
MOV L,A ;L HOLDS THE MAP AS WE PROCESS 8 LOCATIONS
REL1: MOV A,L
RAL ;CY SET TO 1 IF RELOCATION NECESSARY
MOV L,A ;BACK TO L FOR NEXT TIME AROUND
JNC REL2 ;SKIP RELOCATION IF CY=0
;
; CURRENT ADDRESS REQUIRES RELOCATION
LDAX D
ADD H ;APPLY BIAS IN H
STAX D
REL2: INX D ;TO NEXT ADDRESS
JMP REL0 ;FOR ANOTHER BYTE TO RELOCATE
;
ENDREL: ;END OF RELOCATION
lxi b,base
mov a,b
dcx d
stax d
POP D ;CLEAR STACKED ADDRESS
MVI L,0
PCHL ;GO TO RELOCATED PROGRAM
END


View File

@@ -0,0 +1,13 @@
:0101000001FD
:10010300C34401434F505952494748542028432977
:1001130020313938302C204449474954414C20522E
:10012300455345415243482020202020205B4D5019
:100133002F4D5D20444454205645525320312E31D7
:1001430024310002C5C51130010E09CD0500C121BE
:1001530007007E3D90571E00D521000278B1CA6C7E
:10016300010B7E121323C35F01D1C1E56278B1CACB
:100173008E010B7BE607C28101E37E23E36F7D17CC
:100183006FD28A011A841213C37001010000781B15
:0501930012D12E00E96D
:0000000000


View File

@@ -0,0 +1,13 @@
:0102000001FC
:10020300C34402434F505952494748542028432975
:1002130020313938302C204449474954414C20522D
:10022300455345415243482020202020205B4D5018
:100233002F4D5D20444454205645525320312E31D6
:1002430024310003C5C51130020E09CD0501C121BA
:1002530007017E3D90571E00D521000378B1CA6C7B
:10026300020B7E121323C35F02D1C1E56278B1CAC8
:100273008E020B7BE607C28102E37E23E36F7D17C9
:100283006FD28A021A841213C37002010001781B11
:0502930012D12E00E96C
:00010000FF


File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,106 @@
:0C000000C38306000000C34F03C32405A7
:10001500F579CD8F06F1C9FE20C8FE09C8FE2CC8AA
:10002500FE0DC8FE7FCA2405C90E0DCD15000E0AAA
:10003500CD1500C9CD8C06FE0DCA1805CD1C00CA0C
:1000450039000E04217A063620230DC24C000E0518
:10005500217A0677CD8C06CD1C00CA6A00230DCA0D
:100065001805C358003A7A06FE20C9D630FE0AD8CC
:10007500C6F9FE10D8C31805CD98063DC21805EB84
:100085004E2346790504C9CD7D00C21805C9171749
:1000950017E638C917171717E630C9EB2A7A06EBA2
:1000A5007BBEC2AF00237ABEC82B2B2B0DC2A50089
:1000B5000DC90604D5117A061ABEC2CA0023130556
:1000C500C2BD00D1C92305C2CA0011F8FF19D11359
:1000D5000DC2B7000DC9C5CD3900CA18050E0821D6
:1000E5006006CDA000C218050D79C1C9C5CD39007E
:1000F500CA18050E05217206CDB700C218050D797F
:10010500C1C9CDF100FE04CA1805C9CDF100FE0331
:10011500CA1805FE04C03DC9217A06117B060E02E8
:100125001A7723130DC225011AFE20C2180577215F
:1001350050060E08CDA000C218050D79CD9300C953
:10014500CD1D01F5CD7D00F1F6C0C91A2A11007744
:1001550023221100C9CD8C06FE0DCA4005FE2ECA0C
:100165004005CD3C00CA18050E1121A6051145050F
:10017500CDB700C27E01C350010E0A21CE05CDB711
:1001850000C29201CD5001CD8C00C351010E062154
:10019500E605CDB700C2AA01CD5001CD7D00CD51F8
:1001A5000178C351010E0121EA05CDB700C2C60190
:1001B500CDDB00CD9300470E40CDDB00B1B0C35180
:1001C500010E08210A06CDB700C2DC010D79CD93D9
:1001D50000470E80C3BE010E02211206CDB700C234
:1001E500F4010C0C0CCDDB00CD9300B1C351010E15
:1001F50001211606CDB700C21002CDDB00CD93005C
:10020500F606CD5101CD8C00C351010E06212E06F7
:10021500CDB700C2360279FE04DA2302C60547CD02
:100225000701CD9900B0CD5101E6CFFE01C0C3A0B5
:10023500010E01213206CDB700C25102CD8C00FE60
:1002450008D21805CD9300F6C7C351010E02213E11
:1002550006CDB700C271020DC265020EC1C36702A9
:100265000EC5CD1001CD9900B1C351013A7A06FEF4
:100275004AC28102CD4501F602C38B02FE43C296F6
:1002850002CD4501F604CD510179CD510178C35117
:1002950001FE52C21805CD1D01F6C0C351012A0E3B
:1002A50000D5EB2A0C007B957A9CD2B7022A130065
:1002B500F9C9D17E23220C00C93CE607FE06DAC83F
:1002C50002C603FE05DACF02C602C6414FC31500BA
:1002D50047E6F00F0F0F0FC69027CE40274FCD15DD
:1002E5000078E60FC69027CE40274FC315000604B9
:1002F5004ECD15002305C2F5020E20C315007AE682
:10030500380F0F0FC9CD0303874F214206094ECD84
:100315001500234ECD15000E20CD1500C31500CDBB
:100325000303E606FE06C2BE020E53CD15000E50AF
:10033500C31500CD2E002A0C007CCDD5027DCDD570
:10034500020E20CD1500CD1500C92100003922135C
:10035500003A1000B7CA710321FFFF220E003CC20C
:1003650071033C3210002A0C00C39703CD9E06C2D0
:1003750040052110007EB7CA830335CA40052A0C03
:1003850000CDA106CD2E000E20CD1500CD1500CD3A
:100395003B03CDA30257214505011100BECAFD044B
:1003A500230DC2A1030E0ABECAE904230DC2AC0384
:1003B5000E06BECACE04230DC2B703E6C0FE40CA70
:1003C500B404FE80CAA5047AE6C7D604CA96043DDD
:1003D500CA90043DCA7C047AE6C0CA4A047AE60794
:1003E500CA3F04D602CA3404D602CA2904D603CAAF
:1003F5001A047AE608C20B057AE6074F3D2139064D
:1004050009CDF302CD0303FE06C29F04213606CDB6
:10041500F302C37103213206CDF302CD0303CDD51B
:1004250002C371030E43CD1500CD0A03C3D9040ED3
:100435004ACD1500CD0A03C3D9040E52CD1500CD02
:100445000A03C37103211A067AE607CA0B057AE681
:100455000F3DCA6E04FE03DA6104D60587874F098E
:10046500CDF302CD2403C37103CDF302CD24030ED6
:100475002CCD1500C3D904211606CDF302CD0303F7
:10048500CDBE020E2CCD1500C3F404211206C3996E
:1004950004210E06CDF302CD0303CDBE02C37103C5
:1004A5007AE6380F4F21EE0509CDF302C3C50421C5
:1004B500EA05CDF302CD0303CDBE020E2CCD15000A
:1004C5007AE607CDBE02C371037987874F21CE0532
:1004D50009CDF302CDA302F5CDA30257F15FCD956A
:1004E50006C371037987874F21A60509CDF302CD90
:1004F500A302CD9206C371037987874F216205094F
:10050500CDF302C37103217606CDF3027ACD9206AF
:10051500C37103CD2E000E3FCD15002A1300F9211E
:10052500000039221300CD3803221100CD8906CDF4
:100535005A012A1100220C00C32B052A1300F9C900
:1005450000070F171F272F373F76C9E3E9EBF3F9AC
:10055500FBC6CED3D6DBDEE6EEF6FE222A323AC362
:10056500CD454920205350484C4449202058434804
:10057500475043484C5854484C52455420484C54D5
:1005850020434D432053544320434D412044414192
:10059500205241522052414C2052524320524C434A
:1005A500204E4F5020435049204F52492058524920
:1005B50020414E492053424920494E202053554958
:1005C500204F555420414349204144492043414C43
:1005D5004C4A4D50204C444120535441204C484CEA
:1005E5004453484C444D4F562041444420414443D4
:1005F500205355422053424220414E4120585241FA
:10060500204F524120434D5020494E5220444352E1
:10061500204D5649204C58492053544158494E586D
:1006250020444144204C444158444358205253549B
:100635002050535720504F5020505553484E5A5A2A
:10064500204E434320504F504550204D20422043DB
:10065500204420452048204C204D20412042202088
:10066500204420202048202020535020205053573C
:05067500203F3F3D2085
:0000000000


View File

@@ -0,0 +1,106 @@
:0C010000C38307000000C34F04C32406A3
:10011500F579CD8F07F1C9FE20C8FE09C8FE2CC8A8
:10012500FE0DC8FE7FCA2406C90E0DCD15010E0AA7
:10013500CD1501C9CD8C07FE0DCA1806CD1C01CA07
:1001450039010E04217A073620230DC24C010E0514
:10015500217A0777CD8C07CD1C01CA6A01230DCA08
:100165001806C358013A7A07FE20C9D630FE0AD8C8
:10017500C6F9FE10D8C31806CD98073DC21806EB80
:100185004E2346790504C9CD7D01C21806C9171746
:1001950017E638C917171717E630C9EB2A7A07EBA0
:1001A5007BBEC2AF01237ABEC82B2B2B0DC2A50186
:1001B5000DC90604D5117A071ABEC2CA0123130553
:1001C500C2BD01D1C92305C2CA0111F8FF19D11356
:1001D5000DC2B7010DC9C5CD3901CA18060E0821D2
:1001E5006007CDA001C218060D79C1C9C5CD390179
:1001F500CA18060E05217207CDB701C218060D797A
:10020500C1C9CDF101FE04CA1806C9CDF101FE032D
:10021500CA1806FE04C03DC9217A07117B070E02E4
:100225001A7723130DC225021AFE20C2180677215C
:1002350050070E08CDA001C218060D79CD9301C94E
:10024500CD1D02F5CD7D01F1F6C0C91A2A11017740
:1002550023221101C9CD8C07FE0DCA4006FE2ECA08
:100265004006CD3C01CA18060E1121A60611450609
:10027500CDB701C27E02C350020E0A21CE06CDB70C
:1002850001C29202CD5002CD8C01C351020E06214E
:10029500E606CDB701C2AA02CD5002CD7D01CD51F2
:1002A5000278C351020E0121EA06CDB701C2C6028A
:1002B500CDDB01CD9301470E40CDDB01B1B0C3517C
:1002C500020E08210A07CDB701C2DC020D79CD93D4
:1002D50001470E80C3BE020E02211207CDB701C22F
:1002E500F4020C0C0CCDDB01CD9301B1C351020E10
:1002F50001211607CDB701C21003CDDB01CD930156
:10030500F606CD5102CD8C01C351020E06212E07F2
:10031500CDB701C2360379FE04DA2303C60547CDFE
:100325000702CD9901B0CD5102E6CFFE01C0C3A0B1
:10033500020E01213207CDB701C25103CD8C01FE5A
:1003450008D21806CD9301F6C7C351020E02213E0D
:1003550007CDB701C271030DC265030EC1C36703A3
:100365000EC5CD1002CD9901B1C351023A7A07FEEF
:100375004AC28103CD4502F602C38B03FE43C296F2
:1003850003CD4502F604CD510279CD510278C35112
:1003950002FE52C21806CD1D02F6C0C351022A0E36
:1003A50001D5EB2A0C017B957A9CD2B7032A130160
:1003B500F9C9D17E23220C01C93CE607FE06DAC83D
:1003C50003C603FE05DACF03C602C6414FC31501B6
:1003D50047E6F00F0F0F0FC69027CE40274FCD15DC
:1003E5000178E60FC69027CE40274FC315010604B6
:1003F5004ECD15012305C2F5030E20C315017AE67E
:10040500380F0F0FC9CD0304874F214207094ECD81
:100415001501234ECD15010E20CD1501C31501CDB6
:100425000304E606FE06C2BE030E53CD15010E50AB
:10043500C31501CD2E012A0C017CCDD5037DCDD56B
:10044500030E20CD1501CD1501C921000039221358
:10045500013A1001B7CA710421FFFF220E013CC207
:1004650071043C3210012A0C01C39704CD9E07C2CA
:1004750040062110017EB7CA830435CA40062A0CFE
:1004850001CDA107CD2E010E20CD1501CD1501CD34
:100495003B04CDA30357214506011100BECAFD0546
:1004A500230DC2A1040E0ABECAE905230DC2AC0480
:1004B5000E06BECACE05230DC2B704E6C0FE40CA6D
:1004C500B405FE80CAA5057AE6C7D604CA96053DD9
:1004D500CA90053DCA7C057AE6C0CA4A057AE60790
:1004E500CA3F05D602CA3405D602CA2905D603CAAB
:1004F5001A057AE608C20B067AE6074F3D21390749
:1005050009CDF303CD0304FE06C29F05213607CDB1
:10051500F303C37104213207CDF303CD0304CDD515
:1005250003C371040E43CD1501CD0A04C3D9050ECD
:100535004ACD1501CD0A04C3D9050E52CD1501CDFD
:100545000A04C37104211A077AE607CA0B067AE67C
:100555000F3DCA6E05FE03DA6105D60587874F098B
:10056500CDF303CD2404C37104CDF303CD24040ED0
:100575002CCD1501C3D905211607CDF303CD0304F1
:10058500CDBE030E2CCD1501C3F405211207C39969
:1005950005210E07CDF303CD0304CDBE03C37104BE
:1005A5007AE6380F4F21EE0609CDF303C3C50521C1
:1005B500EA06CDF303CD0304CDBE030E2CCD150104
:1005C5007AE607CDBE03C371047987874F21CE062E
:1005D50009CDF303CDA303F5CDA30357F15FCD9566
:1005E50007C371047987874F21A60609CDF303CD8B
:1005F500A303CD9207C371047987874F216206094A
:10060500CDF303C37104217607CDF3037ACD9207A9
:10061500C37104CD2E010E3FCD15012A1301F92119
:10062500000039221301CD3804221101CD8907CDEF
:100635005A022A1101220C01C32B062A1301F9C9FA
:1006450000070F171F272F373F76C9E3E9EBF3F9AB
:10065500FBC6CED3D6DBDEE6EEF6FE222A323AC361
:10066500CD454920205350484C4449202058434803
:10067500475043484C5854484C52455420484C54D4
:1006850020434D432053544320434D412044414191
:10069500205241522052414C2052524320524C4349
:1006A500204E4F5020435049204F5249205852491F
:1006B50020414E492053424920494E202053554957
:1006C500204F555420414349204144492043414C42
:1006D5004C4A4D50204C444120535441204C484CE9
:1006E5004453484C444D4F562041444420414443D3
:1006F500205355422053424220414E4120585241F9
:10070500204F524120434D5020494E5220444352E0
:10071500204D5649204C58492053544158494E586C
:1007250020444144204C444158444358205253549A
:100735002050535720504F5020505553484E5A5A29
:10074500204E434320504F504550204D20422043DA
:10075500204420452048204C204D20412042202087
:10076500204420202048202020535020205053573B
:05077500203F3F3D2084
:00010000FF


File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,176 @@
:10068000C3A206C3AA06C3680FC33D0DC36E0DC344
:10069000580DC3960DC3C50DC3280EC3FE0DC3B0C0
:1006A0000DC9E322E710E3C300002A77112E065E8E
:1006B0002356EB22A80621A206220100210000EB0E
:1006C000722B73AF32EC102A771124220C0022FA1D
:1006D00010222411227511317311E5210200E52B3E
:1006E0002B227311E5E522EA100E0CCDA206250E91
:1006F00000C2A2060E9ACDA20623237E070707F6A4
:10070000C732670F2EFC445E2356210500195E2375
:1007100056210F00197E87C6306F60368623360655
:100720002A77112E5D7EFE20CA220B2A7711E5C39F
:100730007F0A316B11CDFD09DA46071180062A7751
:10074000112E06732372CDA60D3E2DCD580DCD3D35
:100750000DCD6E0DFE0DCA3207D641DA320DFE1AEE
:10076000D2320D5F160021700719195E2356EBE98E
:10077000BA070208320D5608320DEC0800096B0961
:100780009509320D320DD307C209120A320D320D0E
:10079000320D560A510B9A0B960BBE0BEC0B5D0CEF
:1007A000320D320DE5D5C52A77112E5B36000E0FBE
:1007B000EB1E5CCDA206C1D1E1C9CDFD09D2320D3F
:1007C000CD280E3DC2320DCDFE0D220C00CD09000C
:1007D000C33207CDFD09D2320DCD280ECAF707CDA1
:1007E000FE0D220C003DCAF707CDFE0D220E003D86
:1007F000C2320DAFC3F9073E0C321000CD0600C364
:100800003207CD280EFE02C2320DCDFE0DE5CDFE23
:100810000D3E01A5E1F5E57DE6073C473E010F05EC
:10082000C21E082A7711010101094E234611FE005C
:100830001909D147150E037AB71F577B1F5F0DC2E9
:10084000370819CD060AF178CA5008B677C33207BF
:100850002FA677C33207CD280ECA7508CDFE0DDA54
:10086000650822FA10E67F3DCA7508CDFE0D3DC22F
:10087000320DC380082AFA107DE6F06F11BF00190F
:1008800022FC10CDA60DCDB00DC232072AFA1022DF
:10089000FE10CDC60DCD560D7ECD960D23CDDD0DB2
:1008A000DAA9087DE60FC2950822FA102AFE10EB9D
:1008B000CD560D1ACDCE0D132AFA107D93C2B30872
:1008C0007C92C2B3082AFA10CDDD0DDA3207C38359
:1008D00008CD280EFE03C2320DCDFE0DE5CDFE0D76
:1008E000E5CDFE0DD1C1C97B917A98C9CDD1087CE7
:1008F000B7C2320DCDE708DA32077D0203C3F40830
:10090000CDA60DCD280ECDFE0DE5CDFE0DE5CDFE1F
:100910000D444DD1E1F3CA3109DA1F09227511E600
:100920007F3DCA3109CD42093DCA31095950CD42F6
:1009300009316B11D1C1F1E1F92A7511E52A731161
:10094000FBC9F5C521EC107E34B7CA5D09237E23AF
:100950004623BBC25D0978BAC25D097E12237323A8
:1009600072231A773A670F12C1F1C9CD280EFE0221
:10097000C2320DCDFE0DE5CDFE0DD1E5CDA60D1992
:10098000CDC60DCD560DE1AF956F3E009C6719CDDC
:10099000C60DC332072A001122BE092A77112E5C28
:1009A00022C0090E9811BE09CDA2067CB5C2320D37
:1009B0002A77112E7C773EFF322611C332070000C2
:1009C0000000CDD108CDE708DA32070A037723C348
:1009D000C5092A77112E657EE67FFE48C0237EE694
:1009E0007FFE45C0237EE67FFE58C9EB2A24117D99
:1009F000937C9AEBC9CDEB09D0222411C9E52100E3
:100A000000CDEB09E1C9F53E7F953E069CDA320D3B
:100A1000F1C92A7711E5110101194E2346C511FECE
:100A2000001978B1CA330A0B7E25CD060A77242334
:100A3000C3220AC1D1E5621478B1CA32070B7BE642
:100A400007C2490AE37E23E36F7D176FD2520A1A69
:100A5000841213C3380A3A2611B7CA320DCD280EB4
:100A6000210000CA6D0A3DC2320DCDFE0DAF322607
:100A700011EB2A7711EB19E51E800E1ACDA206CDD7
:100A8000A407FEFFCA320DCDD209CABA0AE124E595
:100A90002A7711EB1E5C0E14CDA206E1B7C2220B21
:100AA000EB2A7711EB1E800E801A13CD060A7723EE
:100AB0000DC2A90ACDF509C38F0ACDEA0CFE1ACAE8
:100AC000320DDE3AC2BA0A57E1E5CD020B5FCD0224
:100AD0000BF5CD020BC14F097BB7C2E50A60692255
:100AE0007511C3220BCD020BCD020BCD060A772365
:100AF0001DC2E80ACD020BF5CDF509F1C2320DC3D6
:100B0000BA0AC5E5D5CDEA0CCDF10D07070707E612
:100B1000F0F5CDEA0CCDF10DC1B047D1825778E1A7
:100B2000C1C921460B7EB7CA310BCD580D23C32551
:100B30000BCDA60D2A2411CDC60DCD560D2A75114B
:100B4000CDC60DC332070D0A4E45585420205043E0
:100B500000CD280E3DC2320DCDFE0DCDA60DE5CD4A
:100B6000C60DCD560DE17EE5CD960DCD560DCD3D94
:100B70000DCD6E0DE1FE0DCA920BFE2ECA3207E5B9
:100B8000CD2B0E3DC2320DCDFE0D7CB7C2320D7D98
:100B9000E17723C35B0BAFC39C0B3EFF32E910CD63
:100BA000280E210000CAB50B3DC2320DCDFE0D7DD1
:100BB000B4CA320D2B22EA10CDDC0EC31509CD28A4
:100BC0000ECA220B3DC2320DCDFE0DEB2A77112449
:100BD0007B956F7A9C67DA320DAF7D177C176F3E7D
:100BE000001767CDA60DCDC60DC332073A2611B743
:100BF000CA320DCD280ECA320D3DC2320D32261139
:100C0000CDFE0D23E52A77112E5CEBD50E13CDA278
:100C100006D1D50E16CDA2063CCA320DD1D50E0F87
:100C2000CDA2063CCA320D2A771124D1C10B78B16E
:100C3000CA510CC5D51E8006807E12132305C23909
:100C40000CD1D5E50E15CDA206B7C2320DE1C32BEE
:100C50000C0E10CDA2063CCA320DC33207CD6E0D6C
:100C6000FE0DC26B0CCDDC0EC33207010B00214B15
:100C70000FBECA7E0C23040DC2710CC3320DCD6EA3
:100C80000DFE0DC2320DC5CDA60DCDB20ECD560D49
:100C9000CD3D0DCD280EB7CA32073DC2320DCDFE77
:100CA0000DC178FE05D2CF0C7CB7C2320D7DFE029D
:100CB000D2320DCD7B0E67413EFECDC90CA44167FB
:100CC0007DCDC90CB412C3320705C807C3C90CC215
:100CD000DF0C7CB7C2320D7D21701177C33207E57E
:100CE000CD990ED1732372C33207E5D5C5E52A77B6
:100CF000112E5B7EE1E67FCA130D16005F2A771185
:100D00002E80197EFE1ACA2D0D2A77112E5B34B75C
:100D1000C32E0D0E142A7711EB1E5CCDA206B7C2AE
:100D20002D0DE52A77112E5B77E1C3FA0C37C1D17F
:100D3000E1C9CDA60D3E3FCD580DC3320711231199
:100D40000E20AF121B0DC2430D1B0E0ACDA20621B1
:100D50000411220011C93E20E5D5C55F0E02CDA2C7
:100D600006C1D1E1C9FE7FC8FE61D8E65FC9E521B1
:100D700003117EB73E0DCA850D352A00117E232250
:100D80000011CD650DE1C9FE0AD2910DC630C358E0
:100D90000DC637C3580DF51F1F1F1FE60FCD870D5A
:100DA000F1E60FC3870D3E0DCD580D3E0AC3580D19
:100DB000C5D5E50E0BCDA206E6010000000000003F
:100DC00000E1D1C1C9EB7CCD960D7DC3960DFE7FB0
:100DD000D2D80DFE20D2580D3E2EC3580DEB2AFC62
:100DE000107D936F7C9AEBC9FE0DC8FE2CC8FE20C7
:100DF000C9D630FE0AD8C6F9FE10D8C3320DEB5E54
:100E0000235623EBC9EB210000CDF10D2929292917
:100E1000B56FCD6E0DCDE80DC2090EEBC97323720F
:100E200023E521F31034E1C9CD6E0D21F310360016
:100E300023FE0DCA6D0EFE2CC2460E3E8032F3100C
:100E4000110000C3490ECD050ECD1D0EFE0DCA6D5D
:100E50000ECD6E0DCD050ECD1D0EFE0DCA6D0ECD47
:100E60006E0DCD050ECD1D0EFE0DC2320D11F3100F
:100E70001AFE81CA320D13B7070FC9E5215B0F585F
:100E80001600194E216F117EEBE1C9CD7B0E0DCA04
:100E9000960E1FC38E0EE601C9D60621560F5F16A9
:100EA00000195E16FF21771119C9CD990E5E2356E0
:100EB000EBC97ECD580D78FE05D2C30ECD8B0ECD7D
:100EC000870DC9F53E3DCD580DF1C2D50E217011EB
:100ED0007ECD960DC9CDAA0ECDC60DC9214B0F06EC
:100EE00000CDA60DC5E5CDB20EE1C1042378FE0B01
:100EF000D2FE0EFE05DAE40ECD560DC3E40ECD563D
:100F00000DCD2010F5D5C5CDFD09D21E0F2A7511C6
:100F1000220C0021100036FFCD0600C3470F2B2204
:100F2000FC102A75117ECD960D23CDDD0DDA470F0D
:100F3000F5CD560DF1B3CA430F5E2356EBCDC60D6A
:100F4000C3470F7ECD960DC1D1F1C9435A4D4549D6
:100F5000414244485350F6F4FCFAFE0107080305E9
:100F600021000022EA10C901F3227311E12B22753E
:100F700011F521020039F1317311E5F5C5D52A7556
:100F8000113A670FBE7EF5E521EC107E3600B7CA38
:100F90009F0F3D47235E2356237E1278C38E0FE1B9
:100FA000F1CAC30F23227511EB21A8064E2346CDAB
:100FB000E708DAC30FCD600F2AE710EB3E82B737A0
:100FC000C31509FB2AEA107CB5CAE90F2B22EA10E7
:100FD000CDB00DC2E90F3AE910B7C2E30FCD201032
:100FE000C31509CDDC0EC31509CD600F3E2ACD58BF
:100FF0000D2A7511CDFD09D2FD0F220C00CDC60DB5
:101000002A731122FA10C33207110D0021CC107E71
:10101000A023BE23CA1C10141DC20F105A1600C9EB
:101020002A75114623E5CD091021E61073213710EA
:1010300019195E2356EBE953107B1053107B10599E
:10104000108D10A110C310C310C010C010B610C373
:1010500010B110CD6910C2C610CD7410C3C6103ABD
:10106000A806BBC03AA906BAC9C1E15E235623E56A
:10107000C5C35F102A71115E2356C9CD6910CA8895
:1010800010C1C53E02C3C810D1D5C3C6103A670F00
:10109000B878C29910AFC3CA10E6385F1600C3C64D
:1010A000102A7311EBCD5F10C2C610C35910C3C60E
:1010B00010D1D5C3C610CD7410C1C53E02C3C8102F
:1010C000D113D5D113D53E013C37E1C9FFC3C7C207
:1010D000FFCDC7C4FFC9C7C7FFE9C706C7C6CF0151
:0610E000E722C7C0F7D3B0
:0111020020CC
:1011260000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C710
:10113600C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C739
:10114600C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C729
:10115600C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C719
:10116600C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C709
:03117600C70000AF
:0000000000


View File

@@ -0,0 +1,176 @@
:10078000C3A207C3AA07C36810C33D0EC36E0EC33E
:10079000580EC3960EC3C50EC3280FC3FE0EC3B0BA
:1007A0000EC9E322E711E3C300002A77122E065E8A
:1007B0002356EB22A80721A207220101210001EB09
:1007C000722B73AF32EC112A771224220C0122FA19
:1007D00011222412227512317312E5210200E52B39
:1007E0002B227312E5E522EA110E0CCDA207250E8D
:1007F00000C2A2070E9ACDA20723237E070707F6A1
:10080000C73267102EFC445E2356210500195E2373
:1008100056210F00197E87C6306F60368623360753
:100820002A77122E5D7EFE20CA220C2A7712E5C39B
:100830007F0B316B12CDFD0ADA46081180072A774B
:10084000122E06732372CDA60E3E2DCD580ECD3D31
:100850000ECD6E0EFE0DCA3208D641DA320EFE1AE9
:10086000D2320E5F160021700819195E2356EBE98B
:10087000BA080209320E5609320EEC09000A6B0A58
:10088000950A320E320ED308C20A120B320E320E05
:10089000320E560B510C9A0C960CBE0CEC0C5D0DE6
:1008A000320E320EE5D5C52A77122E5B36000E0FBA
:1008B000EB1E5CCDA207C1D1E1C9CDFD0AD2320E3B
:1008C000CD280F3DC2320ECDFE0E220C01CD090106
:1008D000C33208CDFD0AD2320ECD280FCAF708CD9B
:1008E000FE0E220C013DCAF708CDFE0E220E013D80
:1008F000C2320EAFC3F9083E0C321001CD0601C35F
:100900003208CD280FFE02C2320ECDFE0EE5CDFE1E
:100910000E3E01A5E1F5E57DE6073C473E010F05EA
:10092000C21E092A7712010101094E234611FE0059
:100930001909D147150E037AB71F577B1F5F0DC2E8
:10094000370919CD060BF178CA5009B677C33208BA
:100950002FA677C33208CD280FCA7509CDFE0EDA4F
:10096000650922FA11E67F3DCA7509CDFE0E3DC22A
:10097000320EC380092AFA117DE6F06F11BF00190B
:1009800022FC11CDA60ECDB00EC232082AFA1122D9
:10099000FE11CDC60ECD560E7ECD960E23CDDD0EAC
:1009A000DAA9097DE60FC2950922FA112AFE11EB98
:1009B000CD560E1ACDCE0E132AFA117D93C2B3096D
:1009C0007C92C2B3092AFA11CDDD0EDA3208C38354
:1009D00009CD280FFE03C2320ECDFE0EE5CDFE0E70
:1009E000E5CDFE0ED1C1C97B917A98C9CDD1097CE4
:1009F000B7C2320ECDE709DA32087D0203C3F4092B
:100A0000CDA60ECD280FCDFE0EE5CDFE0EE5CDFE1A
:100A10000E444DD1E1F3CA310ADA1F0A227512E6FB
:100A20007F3DCA310ACD420A3DCA310A5950CD42F2
:100A30000A316B12D1C1F1E1F92A7512E52A73125C
:100A4000FBC9F5C521EC117E34B7CA5D0A237E23AC
:100A50004623BBC25D0A78BAC25D0A7E12237323A5
:100A600072231A773A671012C1F1C9CD280FFE021E
:100A7000C2320ECDFE0EE5CDFE0ED1E5CDA60E198D
:100A8000CDC60ECD560EE1AF956F3E009C6719CDD9
:100A9000C60EC332082A001222BE0A2A77122E5C22
:100AA00022C00A0E9811BE0ACDA2077CB5C2320E32
:100AB0002A77122E7C773EFF322612C332080000BE
:100AC0000000CDD109CDE709DA32080A037723C344
:100AD000C50A2A77122E657EE67FFE48C0237EE691
:100AE0007FFE45C0237EE67FFE58C9EB2A24127D97
:100AF000937C9AEBC9CDEB0AD0222412C9E52100E0
:100B000001CDEB0AE1C9F53E7F953E079CDA320E36
:100B1000F1C92A7712E5110101194E2346C511FECC
:100B2000001978B1CA330B0B7E25CD060B77242331
:100B3000C3220BC1D1E5621478B1CA32080B7BE63F
:100B400007C2490BE37E23E36F7D176FD2520B1A66
:100B5000841213C3380B3A2612B7CA320ECD280FAF
:100B6000210000CA6D0B3DC2320ECDFE0EAF322603
:100B700012EB2A7712EB19E51E800E1ACDA207CDD3
:100B8000A408FEFFCA320ECDD20ACABA0BE124E590
:100B90002A7712EB1E5C0E14CDA207E1B7C2220C1D
:100BA000EB2A7712EB1E800E801A13CD060B7723EB
:100BB0000DC2A90BCDF50AC38F0BCDEA0DFE1ACAE3
:100BC000320EDE3AC2BA0B57E1E5CD020C5FCD0220
:100BD0000CF5CD020CC14F097BB7C2E50B60692251
:100BE0007512C3220CCD020CCD020CCD060B77235F
:100BF0001DC2E80BCD020CF5CDF50AF1C2320EC3D1
:100C0000BA0BC5E5D5CDEA0DCDF10E07070707E60E
:100C1000F0F5CDEA0DCDF10EC1B047D1825778E1A4
:100C2000C1C921460C7EB7CA310CCD580E23C3254D
:100C30000CCDA60E2A2412CDC60ECD560E2A751244
:100C4000CDC60EC332080D0A4E45585420205043DD
:100C500000CD280F3DC2320ECDFE0ECDA60EE5CD45
:100C6000C60ECD560EE17EE5CD960ECD560ECD3D8F
:100C70000ECD6E0EE1FE0DCA920CFE2ECA3208E5B4
:100C8000CD2B0F3DC2320ECDFE0E7CB7C2320E7D93
:100C9000E17723C35B0CAFC39C0C3EFF32E911CD5F
:100CA000280F210000CAB50C3DC2320ECDFE0E7DCC
:100CB000B4CA320E2B22EA11CDDC0FC3150ACD289F
:100CC0000FCA220C3DC2320ECDFE0EEB2A77122443
:100CD0007B956F7A9C67DA320EAF7D177C176F3E7B
:100CE000001767CDA60ECDC60EC332083A2612B73E
:100CF000CA320ECD280FCA320E3DC2320E32261233
:100D0000CDFE0E23E52A77122E5CEBD50E13CDA275
:100D100007D1D50E16CDA2073CCA320ED1D50E0F83
:100D2000CDA2073CCA320E2A771224D1C10B78B16A
:100D3000CA510DC5D51E8006807E12132305C23907
:100D40000DD1D5E50E15CDA207B7C2320EE1C32BEA
:100D50000D0E10CDA2073CCA320EC33208CD6E0E66
:100D6000FE0DC26B0DCDDC0FC33208010B00214B11
:100D700010BECA7E0D23040DC2710DC3320ECD6E9E
:100D80000EFE0DC2320EC5CDA60ECDB20FCD560E43
:100D9000CD3D0ECD280FB7CA32083DC2320ECDFE72
:100DA0000EC178FE05D2CF0D7CB7C2320E7DFE0299
:100DB000D2320ECD7B0F67413EFECDC90DA44167F7
:100DC0007DCDC90DB412C3320805C807C3C90DC211
:100DD000DF0D7CB7C2320E7D21701277C33208E579
:100DE000CD990FD1732372C33208E5D5C5E52A77B3
:100DF000122E5B7EE1E67FCA130E16005F2A771281
:100E00002E80197EFE1ACA2D0E2A77122E5B34B759
:100E1000C32E0E0E142A7712EB1E5CCDA207B7C2AA
:100E20002D0EE52A77122E5B77E1C3FA0D37C1D17B
:100E3000E1C9CDA60E3E3FCD580EC3320811231294
:100E40000E20AF121B0DC2430E1B0E0ACDA20721AE
:100E50000412220012C93E20E5D5C55F0E02CDA2C4
:100E600007C1D1E1C9FE7FC8FE61D8E65FC9E521AF
:100E700003127EB73E0DCA850E352A00127E23224C
:100E80000012CD650EE1C9FE0AD2910EC630C358DC
:100E90000EC637C3580EF51F1F1F1FE60FCD870E56
:100EA000F1E60FC3870E3E0DCD580E3E0AC3580E15
:100EB000C5D5E50E0BCDA207E6010000000000003D
:100EC00000E1D1C1C9EB7CCD960E7DC3960EFE7FAD
:100ED000D2D80EFE20D2580E3E2EC3580EEB2AFC5E
:100EE000117D936F7C9AEBC9FE0DC8FE2CC8FE20C5
:100EF000C9D630FE0AD8C6F9FE10D8C3320EEB5E52
:100F0000235623EBC9EB210000CDF10E2929292915
:100F1000B56FCD6E0ECDE80EC2090FEBC97323720B
:100F200023E521F31134E1C9CD6E0E21F311360012
:100F300023FE0DCA6D0FFE2CC2460F3E8032F31108
:100F4000110000C3490FCD050FCD1D0FFE0DCA6D59
:100F50000FCD6E0ECD050FCD1D0FFE0DCA6D0FCD41
:100F60006E0ECD050FCD1D0FFE0DC2320E11F31109
:100F70001AFE81CA320E13B7070FC9E5215B10585C
:100F80001600194E216F127EEBE1C9CD7B0F0DCA01
:100F9000960F1FC38E0FE601C9D6062156105F16A5
:100FA00000195E16FF21771219C9CD990F5E2356DD
:100FB000EBC97ECD580E78FE05D2C30FCD8B0FCD79
:100FC000870EC9F53E3DCD580EF1C2D50F217012E6
:100FD0007ECD960EC9CDAA0FCDC60EC9214B1006E7
:100FE00000CDA60EC5E5CDB20FE1C1042378FE0BFE
:100FF000D2FE0FFE05DAE40FCD560EC3E40FCD5638
:101000000ECD2011F5D5C5CDFD0AD21E102A7512C0
:10101000220C0121100136FFCD0601C347102B22FF
:10102000FC112A75127ECD960E23CDDD0EDA471007
:10103000F5CD560EF1B3CA43105E2356EBCDC60E66
:10104000C347107ECD960EC1D1F1C9435A4D4549D3
:10105000414244485350F6F4FCFAFE0107080305E8
:1010600021000022EA11C901F3227312E12B22753B
:1010700012F521020039F1317312E5F5C5D52A7553
:10108000123A6710BE7EF5E521EC117E3600B7CA34
:101090009F103D47235E2356237E1278C38E10E1B6
:1010A000F1CAC31023227512EB21A8074E2346CDA7
:1010B000E709DAC310CD60102AE711EB3E82B7379B
:1010C000C3150AFB2AEA117CB5CAE9102B22EA11E2
:1010D000CDB00EC2E9103AE911B7C2E310CD20112C
:1010E000C3150ACDDC0FC3150ACD60103E2ACD58BA
:1010F0000E2A7512CDFD0AD2FD10220C01CDC60EAE
:101100002A731222FA11C33208110D0021CC117E6C
:10111000A023BE23CA1C11141DC20F115A1600C9E8
:101120002A75124623E5CD091121E61173213711E5
:1011300019195E2356EBE953117B1153117B115999
:10114000118D11A111C311C311C011C011B611C36A
:1011500011B111CD6911C2C611CD7411C3C6113AB6
:10116000A807BBC03AA907BAC9C1E15E235623E567
:10117000C5C35F112A71125E2356C9CD6911CA8891
:1011800011C1C53E02C3C811D1D5C3C6113A6710FB
:10119000B878C29911AFC3CA11E6385F1600C3C64A
:1011A000112A7312EBCD5F11C2C611C35911C3C608
:1011B00011D1D5C3C611CD7411C1C53E02C3C8112A
:1011C000D113D5D113D53E013C37E1C9FFC3C7C206
:1011D000FFCDC7C4FFC9C7C7FFE9C706C7C6CF0150
:0611E000E722C7C0F7D3AF
:0112020020CB
:1012260000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C70F
:10123600C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C738
:10124600C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C728
:10125600C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C718
:10126600C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C708
:03127600C70000AE
:00010000FF


View File

@@ -0,0 +1,33 @@
mac b:ddt1asm $$pzsz
era b:ddt1asm0.hex
ren b:ddt1asm0.hex=b:ddt1asm.hex
mac b:ddt1asm $$pzsz+r
era b:ddt1asm1.hex
ren b:ddt1asm1.hex=b:ddt1asm.hex
mac b:ddt2mon $$pzsz
era b:ddt2mon0.hex
ren b:ddt2mon0.hex=b:ddt2mon.hex
mac b:ddt2mon $$pzsz+r
era b:ddt2mon1.hex
ren b:ddt2mon1.hex=b:ddt2mon.hex
pip b:relddt0.hex=b:ddt1asm0.hex[i],b:ddt2mon0.hex[h]
pip b:relddt1.hex=b:ddt1asm1.hex[i],b:ddt2mon1.hex[h]
pip b:relddt.hex=b:relddt0.hex,b:relddt1.hex
genmod b:relddt.hex b:relddt.com
genhex b:relddt 100
era b:relddt0.hex
ren b:relddt0.hex=b:relddt.hex
genhex b:relddt 200
era b:relddt1.hex
ren b:relddt1.hex=b:relddt.hex
mac b:ddt0mov $$pzsz
era b:ddt0mov0.hex
ren b:ddt0mov0.hex=b:ddt0mov.hex
mac b:ddt0mov $$pzsz+r
era b:ddt0mov1.hex
ren b:ddt0mov1.hex=b:ddt0mov.hex
pip b:relddt0.hex=b:relddt0.hex[i],b:ddt0mov0.hex[h]
pip b:relddt1.hex=b:relddt1.hex[i],b:ddt0mov1.hex[h]
pip b:relddt.hex=b:relddt0.hex,b:relddt1.hex
genmod b:relddt.hex b:rdt.prl $$z1500


View File

@@ -0,0 +1,33 @@
;mac b:ddt1asm $$pp+s
;era b:ddt1asm0.hex
;ren b:ddt1asm0.hex=b:ddt1asm.hex
;mac b:ddt1asm $$pzsz+r
;era b:ddt1asm1.hex
;ren b:ddt1asm1.hex=b:ddt1asm.hex
mac b:ddt2mon $$pzsz
;mac b:ddt2mon $$pp+s
era b:ddt2mon0.hex
ren b:ddt2mon0.hex=b:ddt2mon.hex
mac b:ddt2mon $$pzsz+r
era b:ddt2mon1.hex
ren b:ddt2mon1.hex=b:ddt2mon.hex
pip b:relddt0.hex=b:ddt1asm0.hex[i],b:ddt2mon0.hex[h]
pip b:relddt1.hex=b:ddt1asm1.hex[i],b:ddt2mon1.hex[h]
pip b:relddt.hex=b:relddt0.hex,b:relddt1.hex
genmod b:relddt.hex b:relddt.com
genhex b:relddt 100
era b:relddt0.hex
ren b:relddt0.hex=b:relddt.hex
genhex b:relddt 200
era b:relddt1.hex
ren b:relddt1.hex=b:relddt.hex
;mac b:ddt0mov $$pp+s
;era b:ddt0mov0.hex
;ren b:ddt0mov0.hex=b:ddt0mov.hex
;mac b:ddt0mov $$pzsz+r
;era b:ddt0mov1.hex
;ren b:ddt0mov1.hex=b:ddt0mov.hex
pip b:relddt0.hex=b:relddt0.hex[i],b:ddt0mov0.hex[h]
pip b:relddt1.hex=b:relddt1.hex[i],b:ddt0mov1.hex[h]
pip b:relddt.hex=b:relddt0.hex,b:relddt1.hex
genmod b:relddt.hex b:rdt.prl $$z1500

View File

@@ -0,0 +1,35 @@
era b:*.lst
era b:*.lin
era b:*.sym
era b:*.bak
isdd
plm80 :f1:$1.plm pagewidth(80) debug
cpm
pip lst:=b:$1.lst
pip lst:=nul:[p]
era b:$1.lst
isdd
link :f1:$1.obj,:f1:x0100,plm80.lib to :f1:$11.mod
locate :f1:$11.mod code(0100H) stacksize(100)
era b:$11.mod
objhex :f1:$11 to :f1:$11.hex
link :f1:$1.obj,:f1:x0200,plm80.lib to :f1:$12.mod
era b:$1.obj
locate :f1:$12.mod code(0200H) stacksize(100)
era b:$12.mod
objhex :f1:$12 to :f1:$12.hex
era b:$12
cpm
objcpm b:$11
era b:$1*.
pip lst:=b:$11.sym[pt8]
pip lst:=b:$11.lin[pt8]
pip lst:=nul:[p]
era b:*.lin
era b:*.sym
pip b:$1.hex=b:$11.hex,b:$12.hex
era b:$11.hex
era b:$12.hex
genmod b:$1.hex b:$1.prl $$1000
era b:*.hex


View File

@@ -0,0 +1,29 @@
era b:*.lst
era b:*.bak
isdd
;plm80 :f1:$1.plm debug nolist
;era b:*.lst
link :f1:$1.obj,:f1:x0100,plm80.lib to :f1:$11.mod
locate :f1:$11.mod code(0100H) stacksize(100)
era b:$11.mod
objhex :f1:$11 to :f1:$11.hex
link :f1:$1.obj,:f1:x0200,plm80.lib to :f1:$12.mod
era b:$1.obj
locate :f1:$12.mod code(0200H) stacksize(100)
era b:$12.mod
objhex :f1:$12 to :f1:$12.hex
era b:$12
cpm
;objcpm b:$11
era b:$1*.
;pip lst:=b:$11.sym[pt8]
;pip lst:=b:$11.lin[pt8]
;pip lst:=nul:[p]
era b:*.lin
era b:*.sym
pip b:$1.hex=b:$11.hex,b:$12.hex
era b:$11.hex
era b:$12.hex
genmod b:$1.hex b:$1.prl $$1000
era b:*.hex


View File

@@ -0,0 +1,699 @@
:100100000079110000000000000000000000000065
:1001100000000000000000000000000000000000DF
:1001200000000000000000000000000000000000CF
:1001300000000000000000000000000000000000BF
:1001400000000000000000000000000000000000AF
:10015000000000000000000000000000000000009F
:10016000000000000000000000000000000000008F
:10017000000000000000000000000000000000007F
:10018000000000000000000000000000000000006F
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1001C000000000000000000000000000000000002F
:1001D000000000000000000000000000000000001F
:1001E000000000000000000000000000000000000F
:1001F00000000000000000000000000000000000FF
:10020000C38306000000C34F03C32405C148A1C136
:1002100048B11FD21CF579CD8F06F1C9FE20C8FE6A
:1002200009C8FE2CC8FE0DC8FE7FCA2405C90E0DE4
:10023000CD15000E0ACD1500C9CD8C06FE0DCA18CD
:1002400005CD1C00CA39000E04217A063620230D84
:10025000C24C000E05217A0677CD8C06CD1C00CA53
:100260006A00230DCA1805C358003A7A06FE20C951
:10027000D630FE0AD8C6F9FE10D8C31805CD9806A8
:100280003DC21805EB4E2346790504C9CD7D00C259
:100290001805C9171717E638C917171717E630C911
:1002A000EB2A7A06EB7BBEC2AF00237ABEC82B2BAB
:1002B0002B0DC2A5000DC90604D5117A061ABEC2BF
:1002C000CA00231305C2BD00D1C92305C2CA00114B
:1002D000F8FF19D1130DC2B7000DC9C5CD3900CA39
:1002E00018050E08216006CDA000C218050D79C1C1
:1002F000C9C5CD3900CA18050E05217206CDB70053
:10030000C218050D79C1C9CDF100FE04CA1805C98E
:10031000CDF100FE03CA1805FE04C03DC9217A06CE
:10032000117B060E021A7723130DC225011AFE2037
:10033000C21805772150060E08CDA000C218050D81
:1003400079CD9300C9CD1D01F5CD7D00F1F6C0C971
:100350001A2A11007723221100C9CD8C06FE0DCA7E
:100360004005FE2ECA4005CD3C00CA18050E1121DD
:10037000A605114505CDB700C27E01C350010E0A86
:1003800021CE05CDB700C29201CD5001CD8C00C366
:1003900051010E0621E605CDB700C2AA01CD5001DC
:1003A000CD7D00CD510178C351010E0121EA05CD6B
:1003B000B700C2C601CDDB00CD9300470E40CDDBB8
:1003C00000B1B0C351010E08210A06CDB700C2DC4E
:1003D000010D79CD9300470E80C3BE010E0221129C
:1003E00006CDB700C2F4010C0C0CCDDB00CD9300A0
:1003F000B1C351010E01211606CDB700C21002CDC6
:10040000DB00CD9300F606CD5101CD8C00C3510128
:100410000E06212E06CDB700C2360279FE04DA237D
:1004200002C60547CD0701CD9900B0CD5101E6CFF9
:10043000FE01C0C3A0010E01213206CDB700C2519A
:1004400002CD8C00FE08D21805CD9300F6C7C3512B
:10045000010E02213E06CDB700C271020DC2650237
:100460000EC1C367020EC5CD1001CD9900B1C351B5
:10047000013A7A06FE4AC28102CD4501F602C38BDB
:1004800002FE43C29602CD4501F604CD510179CD5D
:10049000510178C35101FE52C21805CD1D01F6C0AD
:1004A000C351012A0E00D5EB2A0C007B957A9CD211
:1004B000B7022A1300F9C9D17E23220C00C93CE6F9
:1004C00007FE06DAC802C603FE05DACF02C602C678
:1004D000414FC3150047E6F00F0F0F0FC69027CE10
:1004E00040274FCD150078E60FC69027CE40274F06
:1004F000C3150006044ECD15002305C2F5020E20DB
:10050000C315007AE6380F0F0FC9CD0303874F21BB
:100510004206094ECD1500234ECD15000E20CD15F7
:1005200000C31500CD0303E606FE06C2BE020E534D
:10053000CD15000E50C31500CD2E002A0C007CCD29
:10054000D5027DCDD5020E20CD1500CD1500C921D7
:100550000000392213003A1000B7CA710321FFFFCF
:10056000220E003CC271033C3210002A0C00C397DB
:1005700003CD9E06C240052110007EB7CA83033515
:10058000CA40052A0C00CDA106CD2E000E20CD15A7
:1005900000CD1500CD3B03CDA30257214505011128
:1005A00000BECAFD04230DC2A1030E0ABECAE9049F
:1005B000230DC2AC030E06BECACE04230DC2B70380
:1005C000E6C0FE40CAB404FE80CAA5047AE6C7D6D7
:1005D00004CA96043DCA90043DCA7C047AE6C0CAA7
:1005E0004A047AE607CA3F04D602CA3404D602CACD
:1005F0002904D603CA1A047AE608C20B057AE6076C
:100600004F3D21390609CDF302CD0303FE06C29FFB
:1006100004213606CDF302C37103213206CDF30265
:10062000CD0303CDD502C371030E43CD1500CD0A12
:1006300003C3D9040E4ACD1500CD0A03C3D9040E55
:1006400052CD1500CD0A03C37103211A067AE607BD
:10065000CA0B057AE60F3DCA6E04FE03DA6104D6C2
:100660000587874F09CDF302CD2403C37103CDF372
:1006700002CD24030E2CCD1500C3D904211606CDBE
:10068000F302CD0303CDBE020E2CCD1500C3F4043E
:10069000211206C39904210E06CDF302CD0303CD2A
:1006A000BE02C371037AE6380F4F21EE0509CDF380
:1006B00002C3C50421EA05CDF302CD0303CDBE027A
:1006C0000E2CCD15007AE607CDBE02C371037987E3
:1006D000874F21CE0509CDF302CDA302F5CDA302AC
:1006E00057F15FCD9506C371037987874F21A60522
:1006F00009CDF302CDA302CD9206C371037987879A
:100700004F21620509CDF302C37103217606CDF3B3
:10071000027ACD9206C37103CD2E000E3FCD150097
:100720002A1300F921000039221300CD38032211C9
:1007300000CD8906CD5A012A1100220C00C32B05D9
:100740002A1300F9C900070F171F272F373F76C953
:10075000E3E9EBF3F9FBC6CED3D6DBDEE6EEF6FE3D
:10076000222A323AC3CD454920205350484C4449AF
:100770002020584348475043484C5854484C524511
:100780005420484C5420434D432053544320434D60
:100790004120444141205241522052414C2052526A
:1007A0004320524C43204E4F5020435049204F523B
:1007B000492058524920414E492053424920494E30
:1007C0002020535549204F5554204143492041444E
:1007D000492043414C4C4A4D50204C4441205354F5
:1007E00041204C484C4453484C444D4F56204144C2
:1007F0004420414443205355422053424220414E1D
:100800004120585241204F524120434D5020494EE3
:100810005220444352204D5649204C5849205354AD
:100820004158494E5820444144204C444158444387
:1008300058205253542050535720504F5020505559
:1008400053484E5A5A204E434320504F5045502053
:100850004D20422043204420452048204C204D205C
:100860004120422020204420202048202020535096
:100870002020505357203F3F3D200E09CD740CC916
:10088000C3A206C3AA06C3680FC33D0DC36E0DC342
:10089000580DC3960DC3C50DC3280EC3FE0DC3B0BE
:1008A0000DC9E322E710E3C300002A77112E065E8C
:1008B0002356EB22A80621A206220100210000EB0C
:1008C000722B73AF32EC102A771124220C0022FA1B
:1008D00010222411227511317311E5210200E52B3C
:1008E0002B227311E5E522EA100E0CCDA206250E8F
:1008F00000C2A2060E9ACDA20623237E070707F6A2
:10090000C732670F2EFC445E2356210500195E2373
:1009100056210F00197E87C6306F60368623360653
:100920002A77112E5D7EFE20CA220B2A7711E5C39D
:100930007F0A316B11CDFD09DA46071180062A774F
:10094000112E06732372CDA60D3E2DCD580DCD3D33
:100950000DCD6E0DFE0DCA3207D641DA320DFE1AEC
:10096000D2320D5F160021700719195E2356EBE98C
:10097000BA070208320D5608320DEC0800096B095F
:100980009509320D320DD307C209120A320D320D0C
:10099000320D560A510B9A0B960BBE0BEC0B5D0CED
:1009A000320D320DE5D5C52A77112E5B36000E0FBC
:1009B000EB1E5CCDA206C1D1E1C9CDFD09D2320D3D
:1009C000CD280E3DC2320DCDFE0D220C00CD09000A
:1009D000C33207CDFD09D2320DCD280ECAF707CD9F
:1009E000FE0D220C003DCAF707CDFE0D220E003D84
:1009F000C2320DAFC3F9073E0C321000CD0600C362
:100A00003207CD280EFE02C2320DCDFE0DE5CDFE21
:100A10000D3E01A5E1F5E57DE6073C473E010F05EA
:100A2000C21E082A7711010101094E234611FE005A
:100A30001909D147150E037AB71F577B1F5F0DC2E7
:100A4000370819CD060AF178CA5008B677C33207BD
:100A50002FA677C33207CD280ECA7508CDFE0DDA52
:100A6000650822FA10E67F3DCA7508CDFE0D3DC22D
:100A7000320DC380082AFA107DE6F06F11BF00190D
:100A800022FC10CDA60DCDB00DC232072AFA1022DD
:100A9000FE10CDC60DCD560D7ECD960D23CDDD0DB0
:100AA000DAA9087DE60FC2950822FA102AFE10EB9B
:100AB000CD560D1ACDCE0D132AFA107D93C2B30870
:100AC0007C92C2B3082AFA10CDDD0DDA3207C38357
:100AD00008CD280EFE03C2320DCDFE0DE5CDFE0D74
:100AE000E5CDFE0DD1C1C97B917A98C9CDD1087CE5
:100AF000B7C2320DCDE708DA32077D0203C3F4082E
:100B0000CDA60DCD280ECDFE0DE5CDFE0DE5CDFE1D
:100B10000D444DD1E1F3CA3109DA1F09227511E6FE
:100B20007F3DCA3109CD42093DCA31095950CD42F4
:100B300009316B11D1C1F1E1F92A7511E52A73115F
:100B4000FBC9F5C521EC107E34B7CA5D09237E23AD
:100B50004623BBC25D0978BAC25D097E12237323A6
:100B600072231A773A670F12C1F1C9CD280EFE021F
:100B7000C2320DCDFE0DE5CDFE0DD1E5CDA60D1990
:100B8000CDC60DCD560DE1AF956F3E009C6719CDDA
:100B9000C60DC332072A001122BE092A77112E5C26
:100BA00022C0090E9811BE09CDA2067CB5C2320D35
:100BB0002A77112E7C773EFF322611C332070000C0
:100BC0000000CDD108CDE708DA32070A037723C346
:100BD000C5092A77112E657EE67FFE48C0237EE692
:100BE0007FFE45C0237EE67FFE58C9EB2A24117D97
:100BF000937C9AEBC9CDEB09D0222411C9E52100E1
:100C000000CDEB09E1C9F53E7F953E069CDA320D39
:100C1000F1C92A7711E5110101194E2346C511FECC
:100C2000001978B1CA330A0B7E25CD060A77242332
:100C3000C3220AC1D1E5621478B1CA32070B7BE640
:100C400007C2490AE37E23E36F7D176FD2520A1A67
:100C5000841213C3380A3A2611B7CA320DCD280EB2
:100C6000210000CA6D0A3DC2320DCDFE0DAF322605
:100C700011EB2A7711EB19E51E800E1ACDA206CDD5
:100C8000A407FEFFCA320DCDD209CABA0AE124E593
:100C90002A7711EB1E5C0E14CDA206E1B7C2220B1F
:100CA000EB2A7711EB1E800E801A13CD060A7723EC
:100CB0000DC2A90ACDF509C38F0ACDEA0CFE1ACAE6
:100CC000320DDE3AC2BA0A57E1E5CD020B5FCD0222
:100CD0000BF5CD020BC14F097BB7C2E50A60692253
:100CE0007511C3220BCD020BCD020BCD060A772363
:100CF0001DC2E80ACD020BF5CDF509F1C2320DC3D4
:100D0000BA0AC5E5D5CDEA0CCDF10D07070707E610
:100D1000F0F5CDEA0CCDF10DC1B047D1825778E1A5
:100D2000C1C921460B7EB7CA310BCD580D23C3254F
:100D30000BCDA60D2A2411CDC60DCD560D2A751149
:100D4000CDC60DC332070D0A4E45585420205043DE
:100D500000CD280E3DC2320DCDFE0DCDA60DE5CD48
:100D6000C60DCD560DE17EE5CD960DCD560DCD3D92
:100D70000DCD6E0DE1FE0DCA920BFE2ECA3207E5B7
:100D8000CD2B0E3DC2320DCDFE0D7CB7C2320D7D96
:100D9000E17723C35B0BAFC39C0B3EFF32E910CD61
:100DA000280E210000CAB50B3DC2320DCDFE0D7DCF
:100DB000B4CA320D2B22EA10CDDC0EC31509CD28A2
:100DC0000ECA220B3DC2320DCDFE0DEB2A77112447
:100DD0007B956F7A9C67DA320DAF7D177C176F3E7B
:100DE000001767CDA60DCDC60DC332073A2611B741
:100DF000CA320DCD280ECA320D3DC2320D32261137
:100E0000CDFE0D23E52A77112E5CEBD50E13CDA276
:100E100006D1D50E16CDA2063CCA320DD1D50E0F85
:100E2000CDA2063CCA320D2A771124D1C10B78B16C
:100E3000CA510CC5D51E8006807E12132305C23907
:100E40000CD1D5E50E15CDA206B7C2320DE1C32BEC
:100E50000C0E10CDA2063CCA320DC33207CD6E0D6A
:100E6000FE0DC26B0CCDDC0EC33207010B00214B13
:100E70000FBECA7E0C23040DC2710CC3320DCD6EA1
:100E80000DFE0DC2320DC5CDA60DCDB20ECD560D47
:100E9000CD3D0DCD280EB7CA32073DC2320DCDFE75
:100EA0000DC178FE05D2CF0C7CB7C2320D7DFE029B
:100EB000D2320DCD7B0E67413EFECDC90CA44167F9
:100EC0007DCDC90CB412C3320705C807C3C90CC213
:100ED000DF0C7CB7C2320D7D21701177C33207E57C
:100EE000CD990ED1732372C33207E5D5C5E52A77B4
:100EF000112E5B7EE1E67FCA130D16005F2A771183
:100F00002E80197EFE1ACA2D0D2A77112E5B34B75A
:100F1000C32E0D0E142A7711EB1E5CCDA206B7C2AC
:100F20002D0DE52A77112E5B77E1C3FA0C37C1D17D
:100F3000E1C9CDA60D3E3FCD580DC3320711231197
:100F40000E20AF121B0DC2430D1B0E0ACDA20621AF
:100F50000411220011C93E20E5D5C55F0E02CDA2C5
:100F600006C1D1E1C9FE7FC8FE61D8E65FC9E521AF
:100F700003117EB73E0DCA850D352A00117E23224E
:100F80000011CD650DE1C9FE0AD2910DC630C358DE
:100F90000DC637C3580DF51F1F1F1FE60FCD870D58
:100FA000F1E60FC3870D3E0DCD580D3E0AC3580D17
:100FB000C5D5E50E0BCDA206E6010000000000003D
:100FC00000E1D1C1C9EB7CCD960D7DC3960DFE7FAE
:100FD000D2D80DFE20D2580D3E2EC3580DEB2AFC60
:100FE000107D936F7C9AEBC9FE0DC8FE2CC8FE20C5
:100FF000C9D630FE0AD8C6F9FE10D8C3320DEB5E52
:10100000235623EBC9EB210000CDF10D2929292915
:10101000B56FCD6E0DCDE80DC2090EEBC97323720D
:1010200023E521F31034E1C9CD6E0D21F310360014
:1010300023FE0DCA6D0EFE2CC2460E3E8032F3100A
:10104000110000C3490ECD050ECD1D0EFE0DCA6D5B
:101050000ECD6E0DCD050ECD1D0EFE0DCA6D0ECD45
:101060006E0DCD050ECD1D0EFE0DC2320D11F3100D
:101070001AFE81CA320D13B7070FC9E5215B0F585D
:101080001600194E216F117EEBE1C9CD7B0E0DCA02
:10109000960E1FC38E0EE601C9D60621560F5F16A7
:1010A00000195E16FF21771119C9CD990E5E2356DE
:1010B000EBC97ECD580D78FE05D2C30ECD8B0ECD7B
:1010C000870DC9F53E3DCD580DF1C2D50E217011E9
:1010D0007ECD960DC9CDAA0ECDC60DC9214B0F06EA
:1010E00000CDA60DC5E5CDB20EE1C1042378FE0BFF
:1010F000D2FE0EFE05DAE40ECD560DC3E40ECD563B
:101100000DCD2010F5D5C5CDFD09D21E0F2A7511C4
:10111000220C0021100036FFCD0600C3470F2B2202
:10112000FC102A75117ECD960D23CDDD0DDA470F0B
:10113000F5CD560DF1B3CA430F5E2356EBCDC60D68
:10114000C3470F7ECD960DC1D1F1C9435A4D4549D4
:10115000414244485350F6F4FCFAFE0107080305E7
:1011600021000022EA10C901F3227311E12B22753C
:1011700011F521020039F1317311E5F5C5D52A7554
:10118000113A670FBE7EF5E521EC107E3600B7CA36
:101190009F0F3D47235E2356237E1278C38E0FE1B7
:1011A000F1CAC30F23227511EB21A8064E2346CDA9
:1011B000E708DAC30FCD600F2AE710EB3E82B7379E
:1011C000C31509FB2AEA107CB5CAE90F2B22EA10E5
:1011D000CDB00DC2E90F3AE910B7C2E30FCD201030
:1011E000C31509CDDC0EC31509CD600F3E2ACD58BD
:1011F0000D2A7511CDFD09D2FD0F220C00CDC60DB3
:101200002A731122FA10C33207110D0021CC107E6F
:10121000A023BE23CA1C10141DC20F105A1600C9E9
:101220002A75114623E5CD091021E61073213710E8
:1012300019195E2356EBE953107B1053107B10599C
:10124000108D10A110C310C310C010C010B610C371
:1012500010B110CD6910C2C610CD7410C3C6103ABB
:10126000A806BBC03AA906BAC9C1E15E235623E568
:10127000C5C35F102A71115E2356C9CD6910CA8893
:1012800010C1C53E02C3C810D1D5C3C6103A670FFE
:10129000B878C29910AFC3CA10E6385F1600C3C64B
:1012A000102A7311EBCD5F10C2C610C35910C3C60C
:1012B00010D1D5C3C610CD7410C1C53E02C3C8102D
:1012C000D113D5D113D53E013C37E1C9FFC3C7C205
:1012D000FFCDC7C4FFC9C7C7FFE9C706C7C6CF014F
:1012E000E722C7C0F7D30021000022DC1CC921FF80
:1012F000FF22DA1C2A411C4DCDBA0701441CCDCA7D
:10130000073A201CFEFFC20F1801A203CDAB082133
:10131000641C360011AA03014D1CCD421532421C3B
:101320002A3B1C22D81C00C7C7C7C7C7C7C7C7C727
:10133000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C73D
:10134000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C72D
:10135000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C71D
:10136000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C70D
:10137000C7C7C7C7C7C7C7000020900040000821E3
:10138000109210211242480009100240001040083B
:101390000841020082424809092042210120082216
:1013A000121110108842484924249242492442498B
:1013B0002084248410920910924849092082440410
:1013C0002490908491084890908484442424204858
:1013D0000804080800040020842008421092042118
:1013E00024442404882224924224909244084108F0
:1013F000210210111041084208089092492484905B
:10140000921248204201249092490924924808925D
:10141000490824089104811248112489212024922A
:101420004920000000000000000000000000000053
:1014300000000000000000000000000000000000AC
:1014400000000000000000000024924924840804E9
:101450009202449240108410801000000120244920
:10146000248084908420805555555555555040040E
:101470000922492492489222124848800024000000
:1014800000442104924824490024924911209222C8
:101490002109249091100212412488809209109011
:1014A000110208042002042442240049242121209E
:1014B00024092048000002011090110800020820B1
:1014C00008100204890448880242482021100412AE
:1014D00048420888084924122241200900084892FD
:1014E000492400112448249042224204424112110E
:1014F000249122008004922489210081102240201E
:10150000008088844909208824844924448108244F
:1015100008108242222040804100902104440808A3
:10152000490082480080004088481084010421015D
:101530000000442108800000040010092008240451
:10154000210490924249090402020444040108045F
:1015500012408911221080212490492424488910A6
:1015600081220000000410804090204002111049A8
:101570002022112489249092492482021020910073
:10158000AAAAAAA492420012048109088091248484
:1015900081000000000000000000000000000000CA
:1015A000000000000000000000000000000000003B
:1015B000000000000000000000000000000000002B
:1015C000000000000000000000000000000000001B
:1015D000000000000000000000000000000000000B
:1015E00000000000000000000000000000000000FB
:1015F00000000000000000000000000000000000EB
:0101000001FD
:10010300C34401434F505952494748542028432977
:1001130020313938302C204449474954414C20522E
:10012300455345415243482020202020205B4D5019
:100133002F4D5D20444454205645525320312E31D7
:1001430024310002C5C51130010E09CD0500C121BE
:1001530007007E3D90571E00D521000278B1CA6C7E
:10016300010B7E121323C35F01D1C1E56278B1CACB
:100173008E010B7BE607C28101E37E23E36F7D17CC
:100183006FD28A011A841213C37001010000781B15
:0501930012D12E00E96D
:0000000000
:100200000079110000000000000000000000000064
:1002100000000000000000000000000000000000DE
:1002200000000000000000000000000000000000CE
:1002300000000000000000000000000000000000BE
:1002400000000000000000000000000000000000AE
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:10028000000000000000000000000000000000006E
:10029000000000000000000000000000000000005E
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1002C000000000000000000000000000000000002E
:1002D000000000000000000000000000000000001E
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:10030000C38306000000C34F03C32405C148A1C135
:1003100048B11FD21CF579CD8F06F1C9FE20C8FE69
:1003200009C8FE2CC8FE0DC8FE7FCA2405C90E0DE3
:10033000CD15000E0ACD1500C9CD8C06FE0DCA18CC
:1003400005CD1C00CA39000E04217A063620230D83
:10035000C24C000E05217A0677CD8C06CD1C00CA52
:100360006A00230DCA1805C358003A7A06FE20C950
:10037000D630FE0AD8C6F9FE10D8C31805CD9806A7
:100380003DC21805EB4E2346790504C9CD7D00C258
:100390001805C9171717E638C917171717E630C910
:1003A000EB2A7A06EB7BBEC2AF00237ABEC82B2BAA
:1003B0002B0DC2A5000DC90604D5117A061ABEC2BE
:1003C000CA00231305C2BD00D1C92305C2CA00114A
:1003D000F8FF19D1130DC2B7000DC9C5CD3900CA38
:1003E00018050E08216006CDA000C218050D79C1C0
:1003F000C9C5CD3900CA18050E05217206CDB70052
:10040000C218050D79C1C9CDF100FE04CA1805C98D
:10041000CDF100FE03CA1805FE04C03DC9217A06CD
:10042000117B060E021A7723130DC225011AFE2036
:10043000C21805772150060E08CDA000C218050D80
:1004400079CD9300C9CD1D01F5CD7D00F1F6C0C970
:100450001A2A11007723221100C9CD8C06FE0DCA7D
:100460004005FE2ECA4005CD3C00CA18050E1121DC
:10047000A605114505CDB700C27E01C350010E0A85
:1004800021CE05CDB700C29201CD5001CD8C00C365
:1004900051010E0621E605CDB700C2AA01CD5001DB
:1004A000CD7D00CD510178C351010E0121EA05CD6A
:1004B000B700C2C601CDDB00CD9300470E40CDDBB7
:1004C00000B1B0C351010E08210A06CDB700C2DC4D
:1004D000010D79CD9300470E80C3BE010E0221129B
:1004E00006CDB700C2F4010C0C0CCDDB00CD93009F
:1004F000B1C351010E01211606CDB700C21002CDC5
:10050000DB00CD9300F606CD5101CD8C00C3510127
:100510000E06212E06CDB700C2360279FE04DA237C
:1005200002C60547CD0701CD9900B0CD5101E6CFF8
:10053000FE01C0C3A0010E01213206CDB700C25199
:1005400002CD8C00FE08D21805CD9300F6C7C3512A
:10055000010E02213E06CDB700C271020DC2650236
:100560000EC1C367020EC5CD1001CD9900B1C351B4
:10057000013A7A06FE4AC28102CD4501F602C38BDA
:1005800002FE43C29602CD4501F604CD510179CD5C
:10059000510178C35101FE52C21805CD1D01F6C0AC
:1005A000C351012A0E00D5EB2A0C007B957A9CD210
:1005B000B7022A1300F9C9D17E23220C00C93CE6F8
:1005C00007FE06DAC802C603FE05DACF02C602C677
:1005D000414FC3150047E6F00F0F0F0FC69027CE0F
:1005E00040274FCD150078E60FC69027CE40274F05
:1005F000C3150006044ECD15002305C2F5020E20DA
:10060000C315007AE6380F0F0FC9CD0303874F21BA
:100610004206094ECD1500234ECD15000E20CD15F6
:1006200000C31500CD0303E606FE06C2BE020E534C
:10063000CD15000E50C31500CD2E002A0C007CCD28
:10064000D5027DCDD5020E20CD1500CD1500C921D6
:100650000000392213003A1000B7CA710321FFFFCE
:10066000220E003CC271033C3210002A0C00C397DA
:1006700003CD9E06C240052110007EB7CA83033514
:10068000CA40052A0C00CDA106CD2E000E20CD15A6
:1006900000CD1500CD3B03CDA30257214505011127
:1006A00000BECAFD04230DC2A1030E0ABECAE9049E
:1006B000230DC2AC030E06BECACE04230DC2B7037F
:1006C000E6C0FE40CAB404FE80CAA5047AE6C7D6D6
:1006D00004CA96043DCA90043DCA7C047AE6C0CAA6
:1006E0004A047AE607CA3F04D602CA3404D602CACC
:1006F0002904D603CA1A047AE608C20B057AE6076B
:100700004F3D21390609CDF302CD0303FE06C29FFA
:1007100004213606CDF302C37103213206CDF30264
:10072000CD0303CDD502C371030E43CD1500CD0A11
:1007300003C3D9040E4ACD1500CD0A03C3D9040E54
:1007400052CD1500CD0A03C37103211A067AE607BC
:10075000CA0B057AE60F3DCA6E04FE03DA6104D6C1
:100760000587874F09CDF302CD2403C37103CDF371
:1007700002CD24030E2CCD1500C3D904211606CDBD
:10078000F302CD0303CDBE020E2CCD1500C3F4043D
:10079000211206C39904210E06CDF302CD0303CD29
:1007A000BE02C371037AE6380F4F21EE0509CDF37F
:1007B00002C3C50421EA05CDF302CD0303CDBE0279
:1007C0000E2CCD15007AE607CDBE02C371037987E2
:1007D000874F21CE0509CDF302CDA302F5CDA302AB
:1007E00057F15FCD9506C371037987874F21A60521
:1007F00009CDF302CDA302CD9206C3710379878799
:100800004F21620509CDF302C37103217606CDF3B2
:10081000027ACD9206C37103CD2E000E3FCD150096
:100820002A1300F921000039221300CD38032211C8
:1008300000CD8906CD5A012A1100220C00C32B05D8
:100840002A1300F9C900070F171F272F373F76C952
:10085000E3E9EBF3F9FBC6CED3D6DBDEE6EEF6FE3C
:10086000222A323AC3CD454920205350484C4449AE
:100870002020584348475043484C5854484C524510
:100880005420484C5420434D432053544320434D5F
:100890004120444141205241522052414C20525269
:1008A0004320524C43204E4F5020435049204F523A
:1008B000492058524920414E492053424920494E2F
:1008C0002020535549204F5554204143492041444D
:1008D000492043414C4C4A4D50204C4441205354F4
:1008E00041204C484C4453484C444D4F56204144C1
:1008F0004420414443205355422053424220414E1C
:100900004120585241204F524120434D5020494EE2
:100910005220444352204D5649204C5849205354AC
:100920004158494E5820444144204C444158444386
:1009300058205253542050535720504F5020505558
:1009400053484E5A5A204E434320504F5045502052
:100950004D20422043204420452048204C204D205B
:100960004120422020204420202048202020535095
:100970002020505357203F3F3D200E09CD740CC915
:10098000C3A206C3AA06C3680FC33D0DC36E0DC341
:10099000580DC3960DC3C50DC3280EC3FE0DC3B0BD
:1009A0000DC9E322E710E3C300002A77112E065E8B
:1009B0002356EB22A80621A206220100210000EB0B
:1009C000722B73AF32EC102A771124220C0022FA1A
:1009D00010222411227511317311E5210200E52B3B
:1009E0002B227311E5E522EA100E0CCDA206250E8E
:1009F00000C2A2060E9ACDA20623237E070707F6A1
:100A0000C732670F2EFC445E2356210500195E2372
:100A100056210F00197E87C6306F60368623360652
:100A20002A77112E5D7EFE20CA220B2A7711E5C39C
:100A30007F0A316B11CDFD09DA46071180062A774E
:100A4000112E06732372CDA60D3E2DCD580DCD3D32
:100A50000DCD6E0DFE0DCA3207D641DA320DFE1AEB
:100A6000D2320D5F160021700719195E2356EBE98B
:100A7000BA070208320D5608320DEC0800096B095E
:100A80009509320D320DD307C209120A320D320D0B
:100A9000320D560A510B9A0B960BBE0BEC0B5D0CEC
:100AA000320D320DE5D5C52A77112E5B36000E0FBB
:100AB000EB1E5CCDA206C1D1E1C9CDFD09D2320D3C
:100AC000CD280E3DC2320DCDFE0D220C00CD090009
:100AD000C33207CDFD09D2320DCD280ECAF707CD9E
:100AE000FE0D220C003DCAF707CDFE0D220E003D83
:100AF000C2320DAFC3F9073E0C321000CD0600C361
:100B00003207CD280EFE02C2320DCDFE0DE5CDFE20
:100B10000D3E01A5E1F5E57DE6073C473E010F05E9
:100B2000C21E082A7711010101094E234611FE0059
:100B30001909D147150E037AB71F577B1F5F0DC2E6
:100B4000370819CD060AF178CA5008B677C33207BC
:100B50002FA677C33207CD280ECA7508CDFE0DDA51
:100B6000650822FA10E67F3DCA7508CDFE0D3DC22C
:100B7000320DC380082AFA107DE6F06F11BF00190C
:100B800022FC10CDA60DCDB00DC232072AFA1022DC
:100B9000FE10CDC60DCD560D7ECD960D23CDDD0DAF
:100BA000DAA9087DE60FC2950822FA102AFE10EB9A
:100BB000CD560D1ACDCE0D132AFA107D93C2B3086F
:100BC0007C92C2B3082AFA10CDDD0DDA3207C38356
:100BD00008CD280EFE03C2320DCDFE0DE5CDFE0D73
:100BE000E5CDFE0DD1C1C97B917A98C9CDD1087CE4
:100BF000B7C2320DCDE708DA32077D0203C3F4082D
:100C0000CDA60DCD280ECDFE0DE5CDFE0DE5CDFE1C
:100C10000D444DD1E1F3CA3109DA1F09227511E6FD
:100C20007F3DCA3109CD42093DCA31095950CD42F3
:100C300009316B11D1C1F1E1F92A7511E52A73115E
:100C4000FBC9F5C521EC107E34B7CA5D09237E23AC
:100C50004623BBC25D0978BAC25D097E12237323A5
:100C600072231A773A670F12C1F1C9CD280EFE021E
:100C7000C2320DCDFE0DE5CDFE0DD1E5CDA60D198F
:100C8000CDC60DCD560DE1AF956F3E009C6719CDD9
:100C9000C60DC332072A001122BE092A77112E5C25
:100CA00022C0090E9811BE09CDA2067CB5C2320D34
:100CB0002A77112E7C773EFF322611C332070000BF
:100CC0000000CDD108CDE708DA32070A037723C345
:100CD000C5092A77112E657EE67FFE48C0237EE691
:100CE0007FFE45C0237EE67FFE58C9EB2A24117D96
:100CF000937C9AEBC9CDEB09D0222411C9E52100E0
:100D000000CDEB09E1C9F53E7F953E069CDA320D38
:100D1000F1C92A7711E5110101194E2346C511FECB
:100D2000001978B1CA330A0B7E25CD060A77242331
:100D3000C3220AC1D1E5621478B1CA32070B7BE63F
:100D400007C2490AE37E23E36F7D176FD2520A1A66
:100D5000841213C3380A3A2611B7CA320DCD280EB1
:100D6000210000CA6D0A3DC2320DCDFE0DAF322604
:100D700011EB2A7711EB19E51E800E1ACDA206CDD4
:100D8000A407FEFFCA320DCDD209CABA0AE124E592
:100D90002A7711EB1E5C0E14CDA206E1B7C2220B1E
:100DA000EB2A7711EB1E800E801A13CD060A7723EB
:100DB0000DC2A90ACDF509C38F0ACDEA0CFE1ACAE5
:100DC000320DDE3AC2BA0A57E1E5CD020B5FCD0221
:100DD0000BF5CD020BC14F097BB7C2E50A60692252
:100DE0007511C3220BCD020BCD020BCD060A772362
:100DF0001DC2E80ACD020BF5CDF509F1C2320DC3D3
:100E0000BA0AC5E5D5CDEA0CCDF10D07070707E60F
:100E1000F0F5CDEA0CCDF10DC1B047D1825778E1A4
:100E2000C1C921460B7EB7CA310BCD580D23C3254E
:100E30000BCDA60D2A2411CDC60DCD560D2A751148
:100E4000CDC60DC332070D0A4E45585420205043DD
:100E500000CD280E3DC2320DCDFE0DCDA60DE5CD47
:100E6000C60DCD560DE17EE5CD960DCD560DCD3D91
:100E70000DCD6E0DE1FE0DCA920BFE2ECA3207E5B6
:100E8000CD2B0E3DC2320DCDFE0D7CB7C2320D7D95
:100E9000E17723C35B0BAFC39C0B3EFF32E910CD60
:100EA000280E210000CAB50B3DC2320DCDFE0D7DCE
:100EB000B4CA320D2B22EA10CDDC0EC31509CD28A1
:100EC0000ECA220B3DC2320DCDFE0DEB2A77112446
:100ED0007B956F7A9C67DA320DAF7D177C176F3E7A
:100EE000001767CDA60DCDC60DC332073A2611B740
:100EF000CA320DCD280ECA320D3DC2320D32261136
:100F0000CDFE0D23E52A77112E5CEBD50E13CDA275
:100F100006D1D50E16CDA2063CCA320DD1D50E0F84
:100F2000CDA2063CCA320D2A771124D1C10B78B16B
:100F3000CA510CC5D51E8006807E12132305C23906
:100F40000CD1D5E50E15CDA206B7C2320DE1C32BEB
:100F50000C0E10CDA2063CCA320DC33207CD6E0D69
:100F6000FE0DC26B0CCDDC0EC33207010B00214B12
:100F70000FBECA7E0C23040DC2710CC3320DCD6EA0
:100F80000DFE0DC2320DC5CDA60DCDB20ECD560D46
:100F9000CD3D0DCD280EB7CA32073DC2320DCDFE74
:100FA0000DC178FE05D2CF0C7CB7C2320D7DFE029A
:100FB000D2320DCD7B0E67413EFECDC90CA44167F8
:100FC0007DCDC90CB412C3320705C807C3C90CC212
:100FD000DF0C7CB7C2320D7D21701177C33207E57B
:100FE000CD990ED1732372C33207E5D5C5E52A77B3
:100FF000112E5B7EE1E67FCA130D16005F2A771182
:101000002E80197EFE1ACA2D0D2A77112E5B34B759
:10101000C32E0D0E142A7711EB1E5CCDA206B7C2AB
:101020002D0DE52A77112E5B77E1C3FA0C37C1D17C
:10103000E1C9CDA60D3E3FCD580DC3320711231196
:101040000E20AF121B0DC2430D1B0E0ACDA20621AE
:101050000411220011C93E20E5D5C55F0E02CDA2C4
:1010600006C1D1E1C9FE7FC8FE61D8E65FC9E521AE
:1010700003117EB73E0DCA850D352A00117E23224D
:101080000011CD650DE1C9FE0AD2910DC630C358DD
:101090000DC637C3580DF51F1F1F1FE60FCD870D57
:1010A000F1E60FC3870D3E0DCD580D3E0AC3580D16
:1010B000C5D5E50E0BCDA206E6010000000000003C
:1010C00000E1D1C1C9EB7CCD960D7DC3960DFE7FAD
:1010D000D2D80DFE20D2580D3E2EC3580DEB2AFC5F
:1010E000107D936F7C9AEBC9FE0DC8FE2CC8FE20C4
:1010F000C9D630FE0AD8C6F9FE10D8C3320DEB5E51
:10110000235623EBC9EB210000CDF10D2929292914
:10111000B56FCD6E0DCDE80DC2090EEBC97323720C
:1011200023E521F31034E1C9CD6E0D21F310360013
:1011300023FE0DCA6D0EFE2CC2460E3E8032F31009
:10114000110000C3490ECD050ECD1D0EFE0DCA6D5A
:101150000ECD6E0DCD050ECD1D0EFE0DCA6D0ECD44
:101160006E0DCD050ECD1D0EFE0DC2320D11F3100C
:101170001AFE81CA320D13B7070FC9E5215B0F585C
:101180001600194E216F117EEBE1C9CD7B0E0DCA01
:10119000960E1FC38E0EE601C9D60621560F5F16A6
:1011A00000195E16FF21771119C9CD990E5E2356DD
:1011B000EBC97ECD580D78FE05D2C30ECD8B0ECD7A
:1011C000870DC9F53E3DCD580DF1C2D50E217011E8
:1011D0007ECD960DC9CDAA0ECDC60DC9214B0F06E9
:1011E00000CDA60DC5E5CDB20EE1C1042378FE0BFE
:1011F000D2FE0EFE05DAE40ECD560DC3E40ECD563A
:101200000DCD2010F5D5C5CDFD09D21E0F2A7511C3
:10121000220C0021100036FFCD0600C3470F2B2201
:10122000FC102A75117ECD960D23CDDD0DDA470F0A
:10123000F5CD560DF1B3CA430F5E2356EBCDC60D67
:10124000C3470F7ECD960DC1D1F1C9435A4D4549D3
:10125000414244485350F6F4FCFAFE0107080305E6
:1012600021000022EA10C901F3227311E12B22753B
:1012700011F521020039F1317311E5F5C5D52A7553
:10128000113A670FBE7EF5E521EC107E3600B7CA35
:101290009F0F3D47235E2356237E1278C38E0FE1B6
:1012A000F1CAC30F23227511EB21A8064E2346CDA8
:1012B000E708DAC30FCD600F2AE710EB3E82B7379D
:1012C000C31509FB2AEA107CB5CAE90F2B22EA10E4
:1012D000CDB00DC2E90F3AE910B7C2E30FCD20102F
:1012E000C31509CDDC0EC31509CD600F3E2ACD58BC
:1012F0000D2A7511CDFD09D2FD0F220C00CDC60DB2
:101300002A731122FA10C33207110D0021CC107E6E
:10131000A023BE23CA1C10141DC20F105A1600C9E8
:101320002A75114623E5CD091021E61073213710E7
:1013300019195E2356EBE953107B1053107B10599B
:10134000108D10A110C310C310C010C010B610C370
:1013500010B110CD6910C2C610CD7410C3C6103ABA
:10136000A806BBC03AA906BAC9C1E15E235623E567
:10137000C5C35F102A71115E2356C9CD6910CA8892
:1013800010C1C53E02C3C810D1D5C3C6103A670FFD
:10139000B878C29910AFC3CA10E6385F1600C3C64A
:1013A000102A7311EBCD5F10C2C610C35910C3C60B
:1013B00010D1D5C3C610CD7410C1C53E02C3C8102C
:1013C000D113D5D113D53E013C37E1C9FFC3C7C204
:1013D000FFCDC7C4FFC9C7C7FFE9C706C7C6CF014E
:1013E000E722C7C0F7D30021000022DC1CC921FF7F
:1013F000FF22DA1C2A411C4DCDBA0701441CCDCA7C
:10140000073A201CFEFFC20F1801A203CDAB082132
:10141000641C360011AA03014D1CCD421532421C3A
:101420002A3B1C22D81C00C7C7C7C7C7C7C7C7C726
:10143000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C73C
:10144000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C72C
:10145000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C71C
:10146000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C70C
:10147000C7C7C7C7C7C7C7000020900040000821E2
:10148000109210211242480009100240001040083A
:101490000841020082424809092042210120082215
:1014A000121110108842484924249242492442498A
:1014B000208424841092091092484909208244040F
:1014C0002490908491084890908484442424204857
:1014D0000804080800040020842008421092042117
:1014E00024442404882224924224909244084108EF
:1014F000210210111041084208089092492484905A
:10150000921248204201249092490924924808925C
:101510004908240891048112481124892120249229
:101520004920000000000000000000000000000052
:1015300000000000000000000000000000000000AB
:1015400000000000000000000024924924840804E8
:10155000920244924010841080100000012024491F
:10156000248084908420805555555555555040040D
:1015700009224924924892221248488000240000FF
:1015800000442104924824490024924911209222C7
:101590002109249091100212412488809209109010
:1015A000110208042002042442240049242121209D
:1015B00024092048000002011090110800020820B0
:1015C00008100204890448880242482021100412AD
:1015D00048420888084924122241200900084892FC
:1015E000492400112448249042224204424112110D
:1015F000249122008004922489210081102240201D
:10160000008088844909208824844924448108244E
:1016100008108242222040804100902104440808A2
:10162000490082480080004088481084010421015C
:101630000000442108800000040010092008240450
:10164000210490924249090402020444040108045E
:1016500012408911221080212490492424488910A5
:1016600081220000000410804090204002111049A7
:101670002022112489249092492482021020910072
:10168000AAAAAAA492420012048109088091248483
:1016900081000000000000000000000000000000C9
:1016A000000000000000000000000000000000003A
:1016B000000000000000000000000000000000002A
:1016C000000000000000000000000000000000001A
:1016D000000000000000000000000000000000000A
:1016E00000000000000000000000000000000000FA
:1016F00000000000000000000000000000000000EA
:0102000001FC
:10020300C34402434F505952494748542028432975
:1002130020313938302C204449474954414C20522D
:10022300455345415243482020202020205B4D5018
:100233002F4D5D20444454205645525320312E31D6
:1002430024310003C5C51130020E09CD0501C121BA
:1002530007017E3D90571E00D521000378B1CA6C7B
:10026300020B7E121323C35F02D1C1E56278B1CAC8
:100273008E020B7BE607C28102E37E23E36F7D17C9
:100283006FD28A021A841213C37002010001781B11
:0502930012D12E00E96C
:00010000FF


View File

@@ -0,0 +1,351 @@
:100100000079110000000000000000000000000065
:1001100000000000000000000000000000000000DF
:1001200000000000000000000000000000000000CF
:1001300000000000000000000000000000000000BF
:1001400000000000000000000000000000000000AF
:10015000000000000000000000000000000000009F
:10016000000000000000000000000000000000008F
:10017000000000000000000000000000000000007F
:10018000000000000000000000000000000000006F
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1001C000000000000000000000000000000000002F
:1001D000000000000000000000000000000000001F
:1001E000000000000000000000000000000000000F
:1001F00000000000000000000000000000000000FF
:10020000C38306000000C34F03C32405C148A1C136
:1002100048B11FD21CF579CD8F06F1C9FE20C8FE6A
:1002200009C8FE2CC8FE0DC8FE7FCA2405C90E0DE4
:10023000CD15000E0ACD1500C9CD8C06FE0DCA18CD
:1002400005CD1C00CA39000E04217A063620230D84
:10025000C24C000E05217A0677CD8C06CD1C00CA53
:100260006A00230DCA1805C358003A7A06FE20C951
:10027000D630FE0AD8C6F9FE10D8C31805CD9806A8
:100280003DC21805EB4E2346790504C9CD7D00C259
:100290001805C9171717E638C917171717E630C911
:1002A000EB2A7A06EB7BBEC2AF00237ABEC82B2BAB
:1002B0002B0DC2A5000DC90604D5117A061ABEC2BF
:1002C000CA00231305C2BD00D1C92305C2CA00114B
:1002D000F8FF19D1130DC2B7000DC9C5CD3900CA39
:1002E00018050E08216006CDA000C218050D79C1C1
:1002F000C9C5CD3900CA18050E05217206CDB70053
:10030000C218050D79C1C9CDF100FE04CA1805C98E
:10031000CDF100FE03CA1805FE04C03DC9217A06CE
:10032000117B060E021A7723130DC225011AFE2037
:10033000C21805772150060E08CDA000C218050D81
:1003400079CD9300C9CD1D01F5CD7D00F1F6C0C971
:100350001A2A11007723221100C9CD8C06FE0DCA7E
:100360004005FE2ECA4005CD3C00CA18050E1121DD
:10037000A605114505CDB700C27E01C350010E0A86
:1003800021CE05CDB700C29201CD5001CD8C00C366
:1003900051010E0621E605CDB700C2AA01CD5001DC
:1003A000CD7D00CD510178C351010E0121EA05CD6B
:1003B000B700C2C601CDDB00CD9300470E40CDDBB8
:1003C00000B1B0C351010E08210A06CDB700C2DC4E
:1003D000010D79CD9300470E80C3BE010E0221129C
:1003E00006CDB700C2F4010C0C0CCDDB00CD9300A0
:1003F000B1C351010E01211606CDB700C21002CDC6
:10040000DB00CD9300F606CD5101CD8C00C3510128
:100410000E06212E06CDB700C2360279FE04DA237D
:1004200002C60547CD0701CD9900B0CD5101E6CFF9
:10043000FE01C0C3A0010E01213206CDB700C2519A
:1004400002CD8C00FE08D21805CD9300F6C7C3512B
:10045000010E02213E06CDB700C271020DC2650237
:100460000EC1C367020EC5CD1001CD9900B1C351B5
:10047000013A7A06FE4AC28102CD4501F602C38BDB
:1004800002FE43C29602CD4501F604CD510179CD5D
:10049000510178C35101FE52C21805CD1D01F6C0AD
:1004A000C351012A0E00D5EB2A0C007B957A9CD211
:1004B000B7022A1300F9C9D17E23220C00C93CE6F9
:1004C00007FE06DAC802C603FE05DACF02C602C678
:1004D000414FC3150047E6F00F0F0F0FC69027CE10
:1004E00040274FCD150078E60FC69027CE40274F06
:1004F000C3150006044ECD15002305C2F5020E20DB
:10050000C315007AE6380F0F0FC9CD0303874F21BB
:100510004206094ECD1500234ECD15000E20CD15F7
:1005200000C31500CD0303E606FE06C2BE020E534D
:10053000CD15000E50C31500CD2E002A0C007CCD29
:10054000D5027DCDD5020E20CD1500CD1500C921D7
:100550000000392213003A1000B7CA710321FFFFCF
:10056000220E003CC271033C3210002A0C00C397DB
:1005700003CD9E06C240052110007EB7CA83033515
:10058000CA40052A0C00CDA106CD2E000E20CD15A7
:1005900000CD1500CD3B03CDA30257214505011128
:1005A00000BECAFD04230DC2A1030E0ABECAE9049F
:1005B000230DC2AC030E06BECACE04230DC2B70380
:1005C000E6C0FE40CAB404FE80CAA5047AE6C7D6D7
:1005D00004CA96043DCA90043DCA7C047AE6C0CAA7
:1005E0004A047AE607CA3F04D602CA3404D602CACD
:1005F0002904D603CA1A047AE608C20B057AE6076C
:100600004F3D21390609CDF302CD0303FE06C29FFB
:1006100004213606CDF302C37103213206CDF30265
:10062000CD0303CDD502C371030E43CD1500CD0A12
:1006300003C3D9040E4ACD1500CD0A03C3D9040E55
:1006400052CD1500CD0A03C37103211A067AE607BD
:10065000CA0B057AE60F3DCA6E04FE03DA6104D6C2
:100660000587874F09CDF302CD2403C37103CDF372
:1006700002CD24030E2CCD1500C3D904211606CDBE
:10068000F302CD0303CDBE020E2CCD1500C3F4043E
:10069000211206C39904210E06CDF302CD0303CD2A
:1006A000BE02C371037AE6380F4F21EE0509CDF380
:1006B00002C3C50421EA05CDF302CD0303CDBE027A
:1006C0000E2CCD15007AE607CDBE02C371037987E3
:1006D000874F21CE0509CDF302CDA302F5CDA302AC
:1006E00057F15FCD9506C371037987874F21A60522
:1006F00009CDF302CDA302CD9206C371037987879A
:100700004F21620509CDF302C37103217606CDF3B3
:10071000027ACD9206C37103CD2E000E3FCD150097
:100720002A1300F921000039221300CD38032211C9
:1007300000CD8906CD5A012A1100220C00C32B05D9
:100740002A1300F9C900070F171F272F373F76C953
:10075000E3E9EBF3F9FBC6CED3D6DBDEE6EEF6FE3D
:10076000222A323AC3CD454920205350484C4449AF
:100770002020584348475043484C5854484C524511
:100780005420484C5420434D432053544320434D60
:100790004120444141205241522052414C2052526A
:1007A0004320524C43204E4F5020435049204F523B
:1007B000492058524920414E492053424920494E30
:1007C0002020535549204F5554204143492041444E
:1007D000492043414C4C4A4D50204C4441205354F5
:1007E00041204C484C4453484C444D4F56204144C2
:1007F0004420414443205355422053424220414E1D
:100800004120585241204F524120434D5020494EE3
:100810005220444352204D5649204C5849205354AD
:100820004158494E5820444144204C444158444387
:1008300058205253542050535720504F5020505559
:1008400053484E5A5A204E434320504F5045502053
:100850004D20422043204420452048204C204D205C
:100860004120422020204420202048202020535096
:100870002020505357203F3F3D200E09CD740CC916
:10088000C3A206C3AA06C3680FC33D0DC36E0DC342
:10089000580DC3960DC3C50DC3280EC3FE0DC3B0BE
:1008A0000DC9E322E710E3C300002A77112E065E8C
:1008B0002356EB22A80621A206220100210000EB0C
:1008C000722B73AF32EC102A771124220C0022FA1B
:1008D00010222411227511317311E5210200E52B3C
:1008E0002B227311E5E522EA100E0CCDA206250E8F
:1008F00000C2A2060E9ACDA20623237E070707F6A2
:10090000C732670F2EFC445E2356210500195E2373
:1009100056210F00197E87C6306F60368623360653
:100920002A77112E5D7EFE20CA220B2A7711E5C39D
:100930007F0A316B11CDFD09DA46071180062A774F
:10094000112E06732372CDA60D3E2DCD580DCD3D33
:100950000DCD6E0DFE0DCA3207D641DA320DFE1AEC
:10096000D2320D5F160021700719195E2356EBE98C
:10097000BA070208320D5608320DEC0800096B095F
:100980009509320D320DD307C209120A320D320D0C
:10099000320D560A510B9A0B960BBE0BEC0B5D0CED
:1009A000320D320DE5D5C52A77112E5B36000E0FBC
:1009B000EB1E5CCDA206C1D1E1C9CDFD09D2320D3D
:1009C000CD280E3DC2320DCDFE0D220C00CD09000A
:1009D000C33207CDFD09D2320DCD280ECAF707CD9F
:1009E000FE0D220C003DCAF707CDFE0D220E003D84
:1009F000C2320DAFC3F9073E0C321000CD0600C362
:100A00003207CD280EFE02C2320DCDFE0DE5CDFE21
:100A10000D3E01A5E1F5E57DE6073C473E010F05EA
:100A2000C21E082A7711010101094E234611FE005A
:100A30001909D147150E037AB71F577B1F5F0DC2E7
:100A4000370819CD060AF178CA5008B677C33207BD
:100A50002FA677C33207CD280ECA7508CDFE0DDA52
:100A6000650822FA10E67F3DCA7508CDFE0D3DC22D
:100A7000320DC380082AFA107DE6F06F11BF00190D
:100A800022FC10CDA60DCDB00DC232072AFA1022DD
:100A9000FE10CDC60DCD560D7ECD960D23CDDD0DB0
:100AA000DAA9087DE60FC2950822FA102AFE10EB9B
:100AB000CD560D1ACDCE0D132AFA107D93C2B30870
:100AC0007C92C2B3082AFA10CDDD0DDA3207C38357
:100AD00008CD280EFE03C2320DCDFE0DE5CDFE0D74
:100AE000E5CDFE0DD1C1C97B917A98C9CDD1087CE5
:100AF000B7C2320DCDE708DA32077D0203C3F4082E
:100B0000CDA60DCD280ECDFE0DE5CDFE0DE5CDFE1D
:100B10000D444DD1E1F3CA3109DA1F09227511E6FE
:100B20007F3DCA3109CD42093DCA31095950CD42F4
:100B300009316B11D1C1F1E1F92A7511E52A73115F
:100B4000FBC9F5C521EC107E34B7CA5D09237E23AD
:100B50004623BBC25D0978BAC25D097E12237323A6
:100B600072231A773A670F12C1F1C9CD280EFE021F
:100B7000C2320DCDFE0DE5CDFE0DD1E5CDA60D1990
:100B8000CDC60DCD560DE1AF956F3E009C6719CDDA
:100B9000C60DC332072A001122BE092A77112E5C26
:100BA00022C0090E9811BE09CDA2067CB5C2320D35
:100BB0002A77112E7C773EFF322611C332070000C0
:100BC0000000CDD108CDE708DA32070A037723C346
:100BD000C5092A77112E657EE67FFE48C0237EE692
:100BE0007FFE45C0237EE67FFE58C9EB2A24117D97
:100BF000937C9AEBC9CDEB09D0222411C9E52100E1
:100C000000CDEB09E1C9F53E7F953E069CDA320D39
:100C1000F1C92A7711E5110101194E2346C511FECC
:100C2000001978B1CA330A0B7E25CD060A77242332
:100C3000C3220AC1D1E5621478B1CA32070B7BE640
:100C400007C2490AE37E23E36F7D176FD2520A1A67
:100C5000841213C3380A3A2611B7CA320DCD280EB2
:100C6000210000CA6D0A3DC2320DCDFE0DAF322605
:100C700011EB2A7711EB19E51E800E1ACDA206CDD5
:100C8000A407FEFFCA320DCDD209CABA0AE124E593
:100C90002A7711EB1E5C0E14CDA206E1B7C2220B1F
:100CA000EB2A7711EB1E800E801A13CD060A7723EC
:100CB0000DC2A90ACDF509C38F0ACDEA0CFE1ACAE6
:100CC000320DDE3AC2BA0A57E1E5CD020B5FCD0222
:100CD0000BF5CD020BC14F097BB7C2E50A60692253
:100CE0007511C3220BCD020BCD020BCD060A772363
:100CF0001DC2E80ACD020BF5CDF509F1C2320DC3D4
:100D0000BA0AC5E5D5CDEA0CCDF10D07070707E610
:100D1000F0F5CDEA0CCDF10DC1B047D1825778E1A5
:100D2000C1C921460B7EB7CA310BCD580D23C3254F
:100D30000BCDA60D2A2411CDC60DCD560D2A751149
:100D4000CDC60DC332070D0A4E45585420205043DE
:100D500000CD280E3DC2320DCDFE0DCDA60DE5CD48
:100D6000C60DCD560DE17EE5CD960DCD560DCD3D92
:100D70000DCD6E0DE1FE0DCA920BFE2ECA3207E5B7
:100D8000CD2B0E3DC2320DCDFE0D7CB7C2320D7D96
:100D9000E17723C35B0BAFC39C0B3EFF32E910CD61
:100DA000280E210000CAB50B3DC2320DCDFE0D7DCF
:100DB000B4CA320D2B22EA10CDDC0EC31509CD28A2
:100DC0000ECA220B3DC2320DCDFE0DEB2A77112447
:100DD0007B956F7A9C67DA320DAF7D177C176F3E7B
:100DE000001767CDA60DCDC60DC332073A2611B741
:100DF000CA320DCD280ECA320D3DC2320D32261137
:100E0000CDFE0D23E52A77112E5CEBD50E13CDA276
:100E100006D1D50E16CDA2063CCA320DD1D50E0F85
:100E2000CDA2063CCA320D2A771124D1C10B78B16C
:100E3000CA510CC5D51E8006807E12132305C23907
:100E40000CD1D5E50E15CDA206B7C2320DE1C32BEC
:100E50000C0E10CDA2063CCA320DC33207CD6E0D6A
:100E6000FE0DC26B0CCDDC0EC33207010B00214B13
:100E70000FBECA7E0C23040DC2710CC3320DCD6EA1
:100E80000DFE0DC2320DC5CDA60DCDB20ECD560D47
:100E9000CD3D0DCD280EB7CA32073DC2320DCDFE75
:100EA0000DC178FE05D2CF0C7CB7C2320D7DFE029B
:100EB000D2320DCD7B0E67413EFECDC90CA44167F9
:100EC0007DCDC90CB412C3320705C807C3C90CC213
:100ED000DF0C7CB7C2320D7D21701177C33207E57C
:100EE000CD990ED1732372C33207E5D5C5E52A77B4
:100EF000112E5B7EE1E67FCA130D16005F2A771183
:100F00002E80197EFE1ACA2D0D2A77112E5B34B75A
:100F1000C32E0D0E142A7711EB1E5CCDA206B7C2AC
:100F20002D0DE52A77112E5B77E1C3FA0C37C1D17D
:100F3000E1C9CDA60D3E3FCD580DC3320711231197
:100F40000E20AF121B0DC2430D1B0E0ACDA20621AF
:100F50000411220011C93E20E5D5C55F0E02CDA2C5
:100F600006C1D1E1C9FE7FC8FE61D8E65FC9E521AF
:100F700003117EB73E0DCA850D352A00117E23224E
:100F80000011CD650DE1C9FE0AD2910DC630C358DE
:100F90000DC637C3580DF51F1F1F1FE60FCD870D58
:100FA000F1E60FC3870D3E0DCD580D3E0AC3580D17
:100FB000C5D5E50E0BCDA206E6010000000000003D
:100FC00000E1D1C1C9EB7CCD960D7DC3960DFE7FAE
:100FD000D2D80DFE20D2580D3E2EC3580DEB2AFC60
:100FE000107D936F7C9AEBC9FE0DC8FE2CC8FE20C5
:100FF000C9D630FE0AD8C6F9FE10D8C3320DEB5E52
:10100000235623EBC9EB210000CDF10D2929292915
:10101000B56FCD6E0DCDE80DC2090EEBC97323720D
:1010200023E521F31034E1C9CD6E0D21F310360014
:1010300023FE0DCA6D0EFE2CC2460E3E8032F3100A
:10104000110000C3490ECD050ECD1D0EFE0DCA6D5B
:101050000ECD6E0DCD050ECD1D0EFE0DCA6D0ECD45
:101060006E0DCD050ECD1D0EFE0DC2320D11F3100D
:101070001AFE81CA320D13B7070FC9E5215B0F585D
:101080001600194E216F117EEBE1C9CD7B0E0DCA02
:10109000960E1FC38E0EE601C9D60621560F5F16A7
:1010A00000195E16FF21771119C9CD990E5E2356DE
:1010B000EBC97ECD580D78FE05D2C30ECD8B0ECD7B
:1010C000870DC9F53E3DCD580DF1C2D50E217011E9
:1010D0007ECD960DC9CDAA0ECDC60DC9214B0F06EA
:1010E00000CDA60DC5E5CDB20EE1C1042378FE0BFF
:1010F000D2FE0EFE05DAE40ECD560DC3E40ECD563B
:101100000DCD2010F5D5C5CDFD09D21E0F2A7511C4
:10111000220C0021100036FFCD0600C3470F2B2202
:10112000FC102A75117ECD960D23CDDD0DDA470F0B
:10113000F5CD560DF1B3CA430F5E2356EBCDC60D68
:10114000C3470F7ECD960DC1D1F1C9435A4D4549D4
:10115000414244485350F6F4FCFAFE0107080305E7
:1011600021000022EA10C901F3227311E12B22753C
:1011700011F521020039F1317311E5F5C5D52A7554
:10118000113A670FBE7EF5E521EC107E3600B7CA36
:101190009F0F3D47235E2356237E1278C38E0FE1B7
:1011A000F1CAC30F23227511EB21A8064E2346CDA9
:1011B000E708DAC30FCD600F2AE710EB3E82B7379E
:1011C000C31509FB2AEA107CB5CAE90F2B22EA10E5
:1011D000CDB00DC2E90F3AE910B7C2E30FCD201030
:1011E000C31509CDDC0EC31509CD600F3E2ACD58BD
:1011F0000D2A7511CDFD09D2FD0F220C00CDC60DB3
:101200002A731122FA10C33207110D0021CC107E6F
:10121000A023BE23CA1C10141DC20F105A1600C9E9
:101220002A75114623E5CD091021E61073213710E8
:1012300019195E2356EBE953107B1053107B10599C
:10124000108D10A110C310C310C010C010B610C371
:1012500010B110CD6910C2C610CD7410C3C6103ABB
:10126000A806BBC03AA906BAC9C1E15E235623E568
:10127000C5C35F102A71115E2356C9CD6910CA8893
:1012800010C1C53E02C3C810D1D5C3C6103A670FFE
:10129000B878C29910AFC3CA10E6385F1600C3C64B
:1012A000102A7311EBCD5F10C2C610C35910C3C60C
:1012B00010D1D5C3C610CD7410C1C53E02C3C8102D
:1012C000D113D5D113D53E013C37E1C9FFC3C7C205
:1012D000FFCDC7C4FFC9C7C7FFE9C706C7C6CF014F
:1012E000E722C7C0F7D30021000022DC1CC921FF80
:1012F000FF22DA1C2A411C4DCDBA0701441CCDCA7D
:10130000073A201CFEFFC20F1801A203CDAB082133
:10131000641C360011AA03014D1CCD421532421C3B
:101320002A3B1C22D81C00C7C7C7C7C7C7C7C7C727
:10133000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C73D
:10134000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C72D
:10135000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C71D
:10136000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C70D
:10137000C7C7C7C7C7C7C7000020900040000821E3
:10138000109210211242480009100240001040083B
:101390000841020082424809092042210120082216
:1013A000121110108842484924249242492442498B
:1013B0002084248410920910924849092082440410
:1013C0002490908491084890908484442424204858
:1013D0000804080800040020842008421092042118
:1013E00024442404882224924224909244084108F0
:1013F000210210111041084208089092492484905B
:10140000921248204201249092490924924808925D
:10141000490824089104811248112489212024922A
:101420004920000000000000000000000000000053
:1014300000000000000000000000000000000000AC
:1014400000000000000000000024924924840804E9
:101450009202449240108410801000000120244920
:10146000248084908420805555555555555040040E
:101470000922492492489222124848800024000000
:1014800000442104924824490024924911209222C8
:101490002109249091100212412488809209109011
:1014A000110208042002042442240049242121209E
:1014B00024092048000002011090110800020820B1
:1014C00008100204890448880242482021100412AE
:1014D00048420888084924122241200900084892FD
:1014E000492400112448249042224204424112110E
:1014F000249122008004922489210081102240201E
:10150000008088844909208824844924448108244F
:1015100008108242222040804100902104440808A3
:10152000490082480080004088481084010421015D
:101530000000442108800000040010092008240451
:10154000210490924249090402020444040108045F
:1015500012408911221080212490492424488910A6
:1015600081220000000410804090204002111049A8
:101570002022112489249092492482021020910073
:10158000AAAAAAA492420012048109088091248484
:1015900081000000000000000000000000000000CA
:1015A000000000000000000000000000000000003B
:1015B000000000000000000000000000000000002B
:1015C000000000000000000000000000000000001B
:1015D000000000000000000000000000000000000B
:1015E00000000000000000000000000000000000FB
:1015F00000000000000000000000000000000000EB
:0101000001FD
:10010300C34401434F505952494748542028432977
:1001130020313938302C204449474954414C20522E
:10012300455345415243482020202020205B4D5019
:100133002F4D5D20444454205645525320312E31D7
:1001430024310002C5C51130010E09CD0500C121BE
:1001530007007E3D90571E00D521000278B1CA6C7E
:10016300010B7E121323C35F01D1C1E56278B1CACB
:100173008E010B7BE607C28101E37E23E36F7D17CC
:100183006FD28A011A841213C37001010000781B15
:0501930012D12E00E96D
:0000000000



View File

@@ -0,0 +1,351 @@
:100200000079110000000000000000000000000064
:1002100000000000000000000000000000000000DE
:1002200000000000000000000000000000000000CE
:1002300000000000000000000000000000000000BE
:1002400000000000000000000000000000000000AE
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:10028000000000000000000000000000000000006E
:10029000000000000000000000000000000000005E
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1002C000000000000000000000000000000000002E
:1002D000000000000000000000000000000000001E
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:10030000C38306000000C34F03C32405C148A1C135
:1003100048B11FD21CF579CD8F06F1C9FE20C8FE69
:1003200009C8FE2CC8FE0DC8FE7FCA2405C90E0DE3
:10033000CD15000E0ACD1500C9CD8C06FE0DCA18CC
:1003400005CD1C00CA39000E04217A063620230D83
:10035000C24C000E05217A0677CD8C06CD1C00CA52
:100360006A00230DCA1805C358003A7A06FE20C950
:10037000D630FE0AD8C6F9FE10D8C31805CD9806A7
:100380003DC21805EB4E2346790504C9CD7D00C258
:100390001805C9171717E638C917171717E630C910
:1003A000EB2A7A06EB7BBEC2AF00237ABEC82B2BAA
:1003B0002B0DC2A5000DC90604D5117A061ABEC2BE
:1003C000CA00231305C2BD00D1C92305C2CA00114A
:1003D000F8FF19D1130DC2B7000DC9C5CD3900CA38
:1003E00018050E08216006CDA000C218050D79C1C0
:1003F000C9C5CD3900CA18050E05217206CDB70052
:10040000C218050D79C1C9CDF100FE04CA1805C98D
:10041000CDF100FE03CA1805FE04C03DC9217A06CD
:10042000117B060E021A7723130DC225011AFE2036
:10043000C21805772150060E08CDA000C218050D80
:1004400079CD9300C9CD1D01F5CD7D00F1F6C0C970
:100450001A2A11007723221100C9CD8C06FE0DCA7D
:100460004005FE2ECA4005CD3C00CA18050E1121DC
:10047000A605114505CDB700C27E01C350010E0A85
:1004800021CE05CDB700C29201CD5001CD8C00C365
:1004900051010E0621E605CDB700C2AA01CD5001DB
:1004A000CD7D00CD510178C351010E0121EA05CD6A
:1004B000B700C2C601CDDB00CD9300470E40CDDBB7
:1004C00000B1B0C351010E08210A06CDB700C2DC4D
:1004D000010D79CD9300470E80C3BE010E0221129B
:1004E00006CDB700C2F4010C0C0CCDDB00CD93009F
:1004F000B1C351010E01211606CDB700C21002CDC5
:10050000DB00CD9300F606CD5101CD8C00C3510127
:100510000E06212E06CDB700C2360279FE04DA237C
:1005200002C60547CD0701CD9900B0CD5101E6CFF8
:10053000FE01C0C3A0010E01213206CDB700C25199
:1005400002CD8C00FE08D21805CD9300F6C7C3512A
:10055000010E02213E06CDB700C271020DC2650236
:100560000EC1C367020EC5CD1001CD9900B1C351B4
:10057000013A7A06FE4AC28102CD4501F602C38BDA
:1005800002FE43C29602CD4501F604CD510179CD5C
:10059000510178C35101FE52C21805CD1D01F6C0AC
:1005A000C351012A0E00D5EB2A0C007B957A9CD210
:1005B000B7022A1300F9C9D17E23220C00C93CE6F8
:1005C00007FE06DAC802C603FE05DACF02C602C677
:1005D000414FC3150047E6F00F0F0F0FC69027CE0F
:1005E00040274FCD150078E60FC69027CE40274F05
:1005F000C3150006044ECD15002305C2F5020E20DA
:10060000C315007AE6380F0F0FC9CD0303874F21BA
:100610004206094ECD1500234ECD15000E20CD15F6
:1006200000C31500CD0303E606FE06C2BE020E534C
:10063000CD15000E50C31500CD2E002A0C007CCD28
:10064000D5027DCDD5020E20CD1500CD1500C921D6
:100650000000392213003A1000B7CA710321FFFFCE
:10066000220E003CC271033C3210002A0C00C397DA
:1006700003CD9E06C240052110007EB7CA83033514
:10068000CA40052A0C00CDA106CD2E000E20CD15A6
:1006900000CD1500CD3B03CDA30257214505011127
:1006A00000BECAFD04230DC2A1030E0ABECAE9049E
:1006B000230DC2AC030E06BECACE04230DC2B7037F
:1006C000E6C0FE40CAB404FE80CAA5047AE6C7D6D6
:1006D00004CA96043DCA90043DCA7C047AE6C0CAA6
:1006E0004A047AE607CA3F04D602CA3404D602CACC
:1006F0002904D603CA1A047AE608C20B057AE6076B
:100700004F3D21390609CDF302CD0303FE06C29FFA
:1007100004213606CDF302C37103213206CDF30264
:10072000CD0303CDD502C371030E43CD1500CD0A11
:1007300003C3D9040E4ACD1500CD0A03C3D9040E54
:1007400052CD1500CD0A03C37103211A067AE607BC
:10075000CA0B057AE60F3DCA6E04FE03DA6104D6C1
:100760000587874F09CDF302CD2403C37103CDF371
:1007700002CD24030E2CCD1500C3D904211606CDBD
:10078000F302CD0303CDBE020E2CCD1500C3F4043D
:10079000211206C39904210E06CDF302CD0303CD29
:1007A000BE02C371037AE6380F4F21EE0509CDF37F
:1007B00002C3C50421EA05CDF302CD0303CDBE0279
:1007C0000E2CCD15007AE607CDBE02C371037987E2
:1007D000874F21CE0509CDF302CDA302F5CDA302AB
:1007E00057F15FCD9506C371037987874F21A60521
:1007F00009CDF302CDA302CD9206C3710379878799
:100800004F21620509CDF302C37103217606CDF3B2
:10081000027ACD9206C37103CD2E000E3FCD150096
:100820002A1300F921000039221300CD38032211C8
:1008300000CD8906CD5A012A1100220C00C32B05D8
:100840002A1300F9C900070F171F272F373F76C952
:10085000E3E9EBF3F9FBC6CED3D6DBDEE6EEF6FE3C
:10086000222A323AC3CD454920205350484C4449AE
:100870002020584348475043484C5854484C524510
:100880005420484C5420434D432053544320434D5F
:100890004120444141205241522052414C20525269
:1008A0004320524C43204E4F5020435049204F523A
:1008B000492058524920414E492053424920494E2F
:1008C0002020535549204F5554204143492041444D
:1008D000492043414C4C4A4D50204C4441205354F4
:1008E00041204C484C4453484C444D4F56204144C1
:1008F0004420414443205355422053424220414E1C
:100900004120585241204F524120434D5020494EE2
:100910005220444352204D5649204C5849205354AC
:100920004158494E5820444144204C444158444386
:1009300058205253542050535720504F5020505558
:1009400053484E5A5A204E434320504F5045502052
:100950004D20422043204420452048204C204D205B
:100960004120422020204420202048202020535095
:100970002020505357203F3F3D200E09CD740CC915
:10098000C3A206C3AA06C3680FC33D0DC36E0DC341
:10099000580DC3960DC3C50DC3280EC3FE0DC3B0BD
:1009A0000DC9E322E710E3C300002A77112E065E8B
:1009B0002356EB22A80621A206220100210000EB0B
:1009C000722B73AF32EC102A771124220C0022FA1A
:1009D00010222411227511317311E5210200E52B3B
:1009E0002B227311E5E522EA100E0CCDA206250E8E
:1009F00000C2A2060E9ACDA20623237E070707F6A1
:100A0000C732670F2EFC445E2356210500195E2372
:100A100056210F00197E87C6306F60368623360652
:100A20002A77112E5D7EFE20CA220B2A7711E5C39C
:100A30007F0A316B11CDFD09DA46071180062A774E
:100A4000112E06732372CDA60D3E2DCD580DCD3D32
:100A50000DCD6E0DFE0DCA3207D641DA320DFE1AEB
:100A6000D2320D5F160021700719195E2356EBE98B
:100A7000BA070208320D5608320DEC0800096B095E
:100A80009509320D320DD307C209120A320D320D0B
:100A9000320D560A510B9A0B960BBE0BEC0B5D0CEC
:100AA000320D320DE5D5C52A77112E5B36000E0FBB
:100AB000EB1E5CCDA206C1D1E1C9CDFD09D2320D3C
:100AC000CD280E3DC2320DCDFE0D220C00CD090009
:100AD000C33207CDFD09D2320DCD280ECAF707CD9E
:100AE000FE0D220C003DCAF707CDFE0D220E003D83
:100AF000C2320DAFC3F9073E0C321000CD0600C361
:100B00003207CD280EFE02C2320DCDFE0DE5CDFE20
:100B10000D3E01A5E1F5E57DE6073C473E010F05E9
:100B2000C21E082A7711010101094E234611FE0059
:100B30001909D147150E037AB71F577B1F5F0DC2E6
:100B4000370819CD060AF178CA5008B677C33207BC
:100B50002FA677C33207CD280ECA7508CDFE0DDA51
:100B6000650822FA10E67F3DCA7508CDFE0D3DC22C
:100B7000320DC380082AFA107DE6F06F11BF00190C
:100B800022FC10CDA60DCDB00DC232072AFA1022DC
:100B9000FE10CDC60DCD560D7ECD960D23CDDD0DAF
:100BA000DAA9087DE60FC2950822FA102AFE10EB9A
:100BB000CD560D1ACDCE0D132AFA107D93C2B3086F
:100BC0007C92C2B3082AFA10CDDD0DDA3207C38356
:100BD00008CD280EFE03C2320DCDFE0DE5CDFE0D73
:100BE000E5CDFE0DD1C1C97B917A98C9CDD1087CE4
:100BF000B7C2320DCDE708DA32077D0203C3F4082D
:100C0000CDA60DCD280ECDFE0DE5CDFE0DE5CDFE1C
:100C10000D444DD1E1F3CA3109DA1F09227511E6FD
:100C20007F3DCA3109CD42093DCA31095950CD42F3
:100C300009316B11D1C1F1E1F92A7511E52A73115E
:100C4000FBC9F5C521EC107E34B7CA5D09237E23AC
:100C50004623BBC25D0978BAC25D097E12237323A5
:100C600072231A773A670F12C1F1C9CD280EFE021E
:100C7000C2320DCDFE0DE5CDFE0DD1E5CDA60D198F
:100C8000CDC60DCD560DE1AF956F3E009C6719CDD9
:100C9000C60DC332072A001122BE092A77112E5C25
:100CA00022C0090E9811BE09CDA2067CB5C2320D34
:100CB0002A77112E7C773EFF322611C332070000BF
:100CC0000000CDD108CDE708DA32070A037723C345
:100CD000C5092A77112E657EE67FFE48C0237EE691
:100CE0007FFE45C0237EE67FFE58C9EB2A24117D96
:100CF000937C9AEBC9CDEB09D0222411C9E52100E0
:100D000000CDEB09E1C9F53E7F953E069CDA320D38
:100D1000F1C92A7711E5110101194E2346C511FECB
:100D2000001978B1CA330A0B7E25CD060A77242331
:100D3000C3220AC1D1E5621478B1CA32070B7BE63F
:100D400007C2490AE37E23E36F7D176FD2520A1A66
:100D5000841213C3380A3A2611B7CA320DCD280EB1
:100D6000210000CA6D0A3DC2320DCDFE0DAF322604
:100D700011EB2A7711EB19E51E800E1ACDA206CDD4
:100D8000A407FEFFCA320DCDD209CABA0AE124E592
:100D90002A7711EB1E5C0E14CDA206E1B7C2220B1E
:100DA000EB2A7711EB1E800E801A13CD060A7723EB
:100DB0000DC2A90ACDF509C38F0ACDEA0CFE1ACAE5
:100DC000320DDE3AC2BA0A57E1E5CD020B5FCD0221
:100DD0000BF5CD020BC14F097BB7C2E50A60692252
:100DE0007511C3220BCD020BCD020BCD060A772362
:100DF0001DC2E80ACD020BF5CDF509F1C2320DC3D3
:100E0000BA0AC5E5D5CDEA0CCDF10D07070707E60F
:100E1000F0F5CDEA0CCDF10DC1B047D1825778E1A4
:100E2000C1C921460B7EB7CA310BCD580D23C3254E
:100E30000BCDA60D2A2411CDC60DCD560D2A751148
:100E4000CDC60DC332070D0A4E45585420205043DD
:100E500000CD280E3DC2320DCDFE0DCDA60DE5CD47
:100E6000C60DCD560DE17EE5CD960DCD560DCD3D91
:100E70000DCD6E0DE1FE0DCA920BFE2ECA3207E5B6
:100E8000CD2B0E3DC2320DCDFE0D7CB7C2320D7D95
:100E9000E17723C35B0BAFC39C0B3EFF32E910CD60
:100EA000280E210000CAB50B3DC2320DCDFE0D7DCE
:100EB000B4CA320D2B22EA10CDDC0EC31509CD28A1
:100EC0000ECA220B3DC2320DCDFE0DEB2A77112446
:100ED0007B956F7A9C67DA320DAF7D177C176F3E7A
:100EE000001767CDA60DCDC60DC332073A2611B740
:100EF000CA320DCD280ECA320D3DC2320D32261136
:100F0000CDFE0D23E52A77112E5CEBD50E13CDA275
:100F100006D1D50E16CDA2063CCA320DD1D50E0F84
:100F2000CDA2063CCA320D2A771124D1C10B78B16B
:100F3000CA510CC5D51E8006807E12132305C23906
:100F40000CD1D5E50E15CDA206B7C2320DE1C32BEB
:100F50000C0E10CDA2063CCA320DC33207CD6E0D69
:100F6000FE0DC26B0CCDDC0EC33207010B00214B12
:100F70000FBECA7E0C23040DC2710CC3320DCD6EA0
:100F80000DFE0DC2320DC5CDA60DCDB20ECD560D46
:100F9000CD3D0DCD280EB7CA32073DC2320DCDFE74
:100FA0000DC178FE05D2CF0C7CB7C2320D7DFE029A
:100FB000D2320DCD7B0E67413EFECDC90CA44167F8
:100FC0007DCDC90CB412C3320705C807C3C90CC212
:100FD000DF0C7CB7C2320D7D21701177C33207E57B
:100FE000CD990ED1732372C33207E5D5C5E52A77B3
:100FF000112E5B7EE1E67FCA130D16005F2A771182
:101000002E80197EFE1ACA2D0D2A77112E5B34B759
:10101000C32E0D0E142A7711EB1E5CCDA206B7C2AB
:101020002D0DE52A77112E5B77E1C3FA0C37C1D17C
:10103000E1C9CDA60D3E3FCD580DC3320711231196
:101040000E20AF121B0DC2430D1B0E0ACDA20621AE
:101050000411220011C93E20E5D5C55F0E02CDA2C4
:1010600006C1D1E1C9FE7FC8FE61D8E65FC9E521AE
:1010700003117EB73E0DCA850D352A00117E23224D
:101080000011CD650DE1C9FE0AD2910DC630C358DD
:101090000DC637C3580DF51F1F1F1FE60FCD870D57
:1010A000F1E60FC3870D3E0DCD580D3E0AC3580D16
:1010B000C5D5E50E0BCDA206E6010000000000003C
:1010C00000E1D1C1C9EB7CCD960D7DC3960DFE7FAD
:1010D000D2D80DFE20D2580D3E2EC3580DEB2AFC5F
:1010E000107D936F7C9AEBC9FE0DC8FE2CC8FE20C4
:1010F000C9D630FE0AD8C6F9FE10D8C3320DEB5E51
:10110000235623EBC9EB210000CDF10D2929292914
:10111000B56FCD6E0DCDE80DC2090EEBC97323720C
:1011200023E521F31034E1C9CD6E0D21F310360013
:1011300023FE0DCA6D0EFE2CC2460E3E8032F31009
:10114000110000C3490ECD050ECD1D0EFE0DCA6D5A
:101150000ECD6E0DCD050ECD1D0EFE0DCA6D0ECD44
:101160006E0DCD050ECD1D0EFE0DC2320D11F3100C
:101170001AFE81CA320D13B7070FC9E5215B0F585C
:101180001600194E216F117EEBE1C9CD7B0E0DCA01
:10119000960E1FC38E0EE601C9D60621560F5F16A6
:1011A00000195E16FF21771119C9CD990E5E2356DD
:1011B000EBC97ECD580D78FE05D2C30ECD8B0ECD7A
:1011C000870DC9F53E3DCD580DF1C2D50E217011E8
:1011D0007ECD960DC9CDAA0ECDC60DC9214B0F06E9
:1011E00000CDA60DC5E5CDB20EE1C1042378FE0BFE
:1011F000D2FE0EFE05DAE40ECD560DC3E40ECD563A
:101200000DCD2010F5D5C5CDFD09D21E0F2A7511C3
:10121000220C0021100036FFCD0600C3470F2B2201
:10122000FC102A75117ECD960D23CDDD0DDA470F0A
:10123000F5CD560DF1B3CA430F5E2356EBCDC60D67
:10124000C3470F7ECD960DC1D1F1C9435A4D4549D3
:10125000414244485350F6F4FCFAFE0107080305E6
:1012600021000022EA10C901F3227311E12B22753B
:1012700011F521020039F1317311E5F5C5D52A7553
:10128000113A670FBE7EF5E521EC107E3600B7CA35
:101290009F0F3D47235E2356237E1278C38E0FE1B6
:1012A000F1CAC30F23227511EB21A8064E2346CDA8
:1012B000E708DAC30FCD600F2AE710EB3E82B7379D
:1012C000C31509FB2AEA107CB5CAE90F2B22EA10E4
:1012D000CDB00DC2E90F3AE910B7C2E30FCD20102F
:1012E000C31509CDDC0EC31509CD600F3E2ACD58BC
:1012F0000D2A7511CDFD09D2FD0F220C00CDC60DB2
:101300002A731122FA10C33207110D0021CC107E6E
:10131000A023BE23CA1C10141DC20F105A1600C9E8
:101320002A75114623E5CD091021E61073213710E7
:1013300019195E2356EBE953107B1053107B10599B
:10134000108D10A110C310C310C010C010B610C370
:1013500010B110CD6910C2C610CD7410C3C6103ABA
:10136000A806BBC03AA906BAC9C1E15E235623E567
:10137000C5C35F102A71115E2356C9CD6910CA8892
:1013800010C1C53E02C3C810D1D5C3C6103A670FFD
:10139000B878C29910AFC3CA10E6385F1600C3C64A
:1013A000102A7311EBCD5F10C2C610C35910C3C60B
:1013B00010D1D5C3C610CD7410C1C53E02C3C8102C
:1013C000D113D5D113D53E013C37E1C9FFC3C7C204
:1013D000FFCDC7C4FFC9C7C7FFE9C706C7C6CF014E
:1013E000E722C7C0F7D30021000022DC1CC921FF7F
:1013F000FF22DA1C2A411C4DCDBA0701441CCDCA7C
:10140000073A201CFEFFC20F1801A203CDAB082132
:10141000641C360011AA03014D1CCD421532421C3A
:101420002A3B1C22D81C00C7C7C7C7C7C7C7C7C726
:10143000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C73C
:10144000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C72C
:10145000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C71C
:10146000C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C70C
:10147000C7C7C7C7C7C7C7000020900040000821E2
:10148000109210211242480009100240001040083A
:101490000841020082424809092042210120082215
:1014A000121110108842484924249242492442498A
:1014B000208424841092091092484909208244040F
:1014C0002490908491084890908484442424204857
:1014D0000804080800040020842008421092042117
:1014E00024442404882224924224909244084108EF
:1014F000210210111041084208089092492484905A
:10150000921248204201249092490924924808925C
:101510004908240891048112481124892120249229
:101520004920000000000000000000000000000052
:1015300000000000000000000000000000000000AB
:1015400000000000000000000024924924840804E8
:10155000920244924010841080100000012024491F
:10156000248084908420805555555555555040040D
:1015700009224924924892221248488000240000FF
:1015800000442104924824490024924911209222C7
:101590002109249091100212412488809209109010
:1015A000110208042002042442240049242121209D
:1015B00024092048000002011090110800020820B0
:1015C00008100204890448880242482021100412AD
:1015D00048420888084924122241200900084892FC
:1015E000492400112448249042224204424112110D
:1015F000249122008004922489210081102240201D
:10160000008088844909208824844924448108244E
:1016100008108242222040804100902104440808A2
:10162000490082480080004088481084010421015C
:101630000000442108800000040010092008240450
:10164000210490924249090402020444040108045E
:1016500012408911221080212490492424488910A5
:1016600081220000000410804090204002111049A7
:101670002022112489249092492482021020910072
:10168000AAAAAAA492420012048109088091248483
:1016900081000000000000000000000000000000C9
:1016A000000000000000000000000000000000003A
:1016B000000000000000000000000000000000002A
:1016C000000000000000000000000000000000001A
:1016D000000000000000000000000000000000000A
:1016E00000000000000000000000000000000000FA
:1016F00000000000000000000000000000000000EA
:0102000001FC
:10020300C34402434F505952494748542028432975
:1002130020313938302C204449474954414C20522D
:10022300455345415243482020202020205B4D5018
:100233002F4D5D20444454205645525320312E31D6
:1002430024310003C5C51130020E09CD0501C121BA
:1002530007017E3D90571E00D521000378B1CA6C7B
:10026300020B7E121323C35F02D1C1E56278B1CAC8
:100273008E020B7BE607C28102E37E23E36F7D17C9
:100283006FD28A021A841213C37002010001781B11
:0502930012D12E00E96C
:00010000FF



View File

@@ -0,0 +1,21 @@
$title ('PRL Externals')
name x0100
CSEG
offset equ 0000h
mon1 equ 0005h+offset
mon2 equ 0005h+offset
mon2a equ 0005h+offset
mon3 equ 0005h+offset
public mon1,mon2,mon2a,mon3
fcb equ 005ch+offset
fcb16 equ 006ch+offset
tbuff equ 0080h+offset
public fcb,fcb16,tbuff
bdisk equ 0004h+offset
maxb equ 0006h+offset
buff equ 0080h+offset
boot equ 0000h+offset
public bdisk,maxb,buff,boot
END


View File

@@ -0,0 +1,21 @@
$title ('PRL Externals')
name x0200
CSEG
offset equ 0100h
mon1 equ 0005h+offset
mon2 equ 0005h+offset
mon2a equ 0005h+offset
mon3 equ 0005h+offset
public mon1,mon2,mon2a,mon3
fcb equ 005ch+offset
fcb16 equ 006ch+offset
tbuff equ 0080h+offset
public fcb,fcb16,tbuff
bdisk equ 0004h+offset
maxb equ 0006h+offset
buff equ 0080h+offset
boot equ 0000h+offset
public bdisk,maxb,buff,boot
END