A-Level Major Project 1995
Figure 9 - BBC BASIC assembler for 8031/8051 processors.
10REM 8031/8051 ASSEMBLER/DISASSEMBLER
20DATA &28,ADD A'R0,0,0,0
30DATA &29,ADD A'R1,0,0,1
40DATA &2A,ADD A'R2,0,0,2
50DATA &2B,ADD A'R3,0,0,3
60DATA &2C,ADD A'R4,0,0,4
70DATA &2D,ADD A'R5,0,0,5
80DATA &2E,ADD A'R6,0,0,6
90DATA &2F,ADD A'R7,0,0,7
100DATA &25,ADD A'dr,1,1,0
110DATA &26,ADD A'(R0),0,2,0
120DATA &27,ADD A'(R1),0,2,1
130DATA &24,ADD A'da,1,3,0
140DATA &38,ADDC A'R0,0,0,0
150DATA &39,ADDC A'R1,0,0,1
160DATA &3A,ADDC A'R2,0,0,2
170DATA &3B,ADDC A'R3,0,0,3
180DATA &3C,ADDC A'R4,0,0,4
190DATA &3D,ADDC A'R5,0,0,5
200DATA &3E,ADDC A'R6,0,0,6
210DATA &3F,ADDC A'R7,0,0,7
220DATA &35,ADDC A'dr,1,1,0
230DATA &36,ADDC A'(R0),0,2,0
240DATA &37,ADDC A'(R1),0,2,1
250DATA &34,ADDC A'da,1,3,0
260DATA &98,SUBB A'R0,0,0,0
270DATA &99,SUBB A'R1,0,0,1
280DATA &9A,SUBB A'R2,0,0,2
290DATA &9B,SUBB A'R3,0,0,3
300DATA &9C,SUBB A'R4,0,0,4
310DATA &9D,SUBB A'R5,0,0,5
320DATA &9E,SUBB A'R6,0,0,6
330DATA &9F,SUBB A'R7,0,0,7
340DATA &95,SUBB A'dr,1,1,0
350DATA &96,SUBB A'(R0),0,2,0
360DATA &97,SUBB A'(R1),0,2,1
370DATA &94,SUBB A'da,1,3,0
380DATA &04,INC A,0,9,0
390DATA &08,INC R0,0,0,0
391DATA &09,INC R1,0,0,1
392DATA &0A,INC R2,0,0,2
393DATA &0B,INC R3,0,0,3
394DATA &0C,INC R4,0,0,4
395DATA &0D,INC R5,0,0,5
396DATA &0E,INC R6,0,0,6
397DATA &0F,INC R7,0,0,7
400DATA &05,INC dr,1,1,0
410DATA &06,INC (R0),0,2,0
420DATA &07,INC (R1),0,2,1
430DATA &14,DEC A,0,9,0
440DATA &18,DEC R0,0,0,0
450DATA &19,DEC R1,0,0,1
460DATA &1A,DEC R2,0,0,2
470DATA &1B,DEC R3,0,0,3
480DATA &1C,DEC R4,0,0,4
490DATA &1D,DEC R5,0,0,5
500DATA &1E,DEC R6,0,0,6
510DATA &1F,DEC R7,0,0,7
520DATA &15,DEC dr,1,1,0
530DATA &16,DEC (R0),0,2,0
540DATA &17,DEC (R1),0,2,1
550DATA &A3,INC DPTR,0,10,0
560DATA &A4,MUL AB,0,9,0
570DATA &84,DIV AB,0,9,0
580DATA &D4,DA A,0,9,0
590DATA &58,ANL A'R0,0,0,0
600DATA &59,ANL A'R1,0,0,1
610DATA &5A,ANL A'R2,0,0,2
620DATA &5B,ANL A'R3,0,0,3
630DATA &5C,ANL A'R4,0,0,4
640DATA &5D,ANL A'R5,0,0,5
650DATA &5E,ANL A'R6,0,0,6
660DATA &5F,ANL A'R7,0,0,7
670DATA &55,ANL A'dr,1,1,0
680DATA &56,ANL A'(R0),0,2,0
690DATA &57,ANL A'(R1),0,2,1
700DATA &54,ANL A'da,1,3,0
710DATA &52,ANL dr'A,1,1,0
720DATA &53,ANL dr'da,2,11,0
730DATA &48,ORL A'R0,0,0,0
740DATA &49,ORL A'R1,0,0,1
750DATA &4A,ORL A'R2,0,0,2
760DATA &4B,ORL A'R3,0,0,3
770DATA &4C,ORL A'R4,0,0,4
780DATA &4D,ORL A'R5,0,0,5
790DATA &4E,ORL A'R6,0,0,6
800DATA &4F,ORL A'R7,0,0,7
810DATA &45,ORL A'dr,1,1,0
820DATA &46,ORL A'(R0),0,2,0
830DATA &47,ORL A'(R1),0,2,1
840DATA &44,ORL A'da,1,3,0
850DATA &42,ORL dr'A,1,1,0
860DATA &43,ORL dr'da,2,11,0
861DATA &68,XRL A'R0,0,0,0
862DATA &69,XRL A'R1,0,0,1
863DATA &6A,XRL A'R2,0,0,2
864DATA &6B,XRL A'R3,0,0,3
865DATA &6C,XRL A'R4,0,0,4
866DATA &6D,XRL A'R5,0,0,5
867DATA &6E,XRL A'R6,0,0,6
868DATA &6F,XRL A'R7,0,0,7
869DATA &65,XRL A'dr,1,1,0
870DATA &66,XRL A'(R0),0,2,0
871DATA &67,XRL A'(R1),0,2,1
872DATA &64,XRL A'da,1,3,0
873DATA &62,XRL dr'A,1,1,0
874DATA &63,XRL dr'da,2,11,0
875DATA &E4,CLR A,0,9,0
880DATA &F4,CPL A,0,9,0
890DATA &23,RL A,0,9,0
900DATA &33,RLC A,0,9,0
910DATA &03,RR A,0,9,0
920DATA &13,RRC A,0,9,0
930DATA &C4,SWAP A,0,9,0
940DATA &E8,MOV A'R0,0,0,0
950DATA &E9,MOV A'R1,0,0,1
960DATA &EA,MOV A'R2,0,0,2
970DATA &EB,MOV A'R3,0,0,3
980DATA &EC,MOV A'R4,0,0,4
990DATA &ED,MOV A'R5,0,0,5
1000DATA &EE,MOV A'R6,0,0,6
1010DATA &EF,MOV A'R7,0,0,7
1020DATA &E5,MOV A'dr,1,1,0
1030DATA &E6,MOV A'(R0),0,2,0
1040DATA &E7,MOV A'(R1),0,2,1
1050DATA &74,MOV A'da,1,3,0
1060DATA &F8,MOV R0'A,0,0,0
1070DATA &F9,MOV R1'A,0,0,1
1080DATA &FA,MOV R2'A,0,0,2
1090DATA &FB,MOV R3'A,0,0,3
1100DATA &FC,MOV R4'A,0,0,4
1110DATA &FD,MOV R5'A,0,0,5
1120DATA &FE,MOV R6'A,0,0,6
1130DATA &FF,MOV R7'A,0,0,7
1140DATA &A8,MOV R0'dr,1,0,0
1150DATA &A9,MOV R1'dr,1,0,1
1160DATA &AA,MOV R2'dr,1,0,2
1170DATA &AB,MOV R3'dr,1,0,3
1180DATA &AC,MOV R4'dr,1,0,4
1190DATA &AD,MOV R5'dr,1,0,5
1200DATA &AE,MOV R6'dr,1,0,6
1210DATA &AF,MOV R7'dr,1,0,7
1220DATA &78,MOV R0'da,1,0,0
1230DATA &79,MOV R1'da,1,0,1
1240DATA &7A,MOV R2'da,1,0,2
1250DATA &7B,MOV R3'da,1,0,3
1260DATA &7C,MOV R4'da,1,0,4
1270DATA &7D,MOV R5'da,1,0,5
1280DATA &7E,MOV R6'da,1,0,6
1290DATA &7F,MOV R7'da,1,0,7
1300DATA &F5,MOV dr'A,1,1,0
1310DATA &88,MOV dr'R0,1,0,0
1320DATA &89,MOV dr'R1,1,0,1
1330DATA &8A,MOV dr'R2,1,0,2
1340DATA &8B,MOV dr'R3,1,0,3
1350DATA &8C,MOV dr'R4,1,0,4
1360DATA &8D,MOV dr'R5,1,0,5
1370DATA &8E,MOV dr'R6,1,0,6
1380DATA &8F,MOV dr'R7,1,0,7
1390DATA &85,MOV dr'dr,2,1,0
1400DATA &86,MOV dr'(R0),1,2,0
1410DATA &87,MOV dr'(R1),1,2,1
1420DATA &75,MOV dr'da,2,3,0
1430DATA &F6,MOV (R0)'A,0,2,0
1440DATA &F7,MOV (R1)'A,0,2,1
1450DATA &A6,MOV (R0)'dr,1,2,0
1460DATA &A7,MOV (R1)'dr,1,2,1
1470DATA &76,MOV (R0)'da,1,2,0
1480DATA &77,MOV (R1)'da,1,2,1
1490DATA &90,MOV DPTR'dwdw,2,10,0
1500DATA &93,MOVC A'(A+DTPR),0,10,0
1510DATA &83,MOVC A'(A+PC),0,12,0
1512DATA &E2,MOVX A'(R0),0,2,0
1514DATA &E3,MOVX A'(R1),0,2,1
1516DATA &E0,MOVX A'(DTPR),0,10,0
1520DATA &F2,MOVX (R0)'A,0,2,0
1530DATA &F3,MOVX (R1)'A,0,2,1
1540DATA &F0,MOVX (DTPR)'A,0,10,0
1550DATA &C0,PUSH dr,1,1,0
1560DATA &D0,POP dr,1,1,0
1570DATA &C8,XCH A'R0,0,0,0
1580DATA &C9,XCH A'R1,0,0,1
1590DATA &CA,XCH A'R2,0,0,2
1600DATA &CB,XCH A'R3,0,0,3
1610DATA &CC,XCH A'R4,0,0,4
1620DATA &CD,XCH A'R5,0,0,5
1630DATA &CE,XCH A'R6,0,0,6
1640DATA &CF,XCH A'R7,0,0,7
1650DATA &C5,XCH A'dr,1,1,0
1660DATA &C6,XCH A'(R0),0,2,0
1670DATA &C7,XCH A'(R1),0,2,1
1680DATA &D6,XCHD A'(R0),0,2,0
1690DATA &D7,XCHD A'(R1),0,2,1
1700DATA &C3,CLR C,0,9,0
1710DATA &C2,CLR bt,1,5,0
1720DATA &D3,SETB C,0,9,0
1730DATA &D2,SETB bt,1,5,0
1740DATA &B3,CPL C,0,9,0
1750DATA &B2,CPL bt,1,5,0
1760DATA &82,ANL C'bt,1,5,0
1770DATA &B0,ANL C'/bt,1,5,0
1780DATA &72,ORL C'bt,1,5,0
1790DATA &A0,ORL C'/bt,1,5,0
1800DATA &A2,MOV C'bt,1,5,0
1810DATA &92,MOV bt'C,1,5,0
1820DATA &11,ACALL &0ad,1,7,0
1830DATA &31,ACALL &1ad,1,7,1
1840DATA &51,ACALL &2ad,1,7,2
1850DATA &71,ACALL &3ad,1,7,3
1860DATA &91,ACALL &4ad,1,7,4
1870DATA &B1,ACALL &5ad,1,7,5
1880DATA &D1,ACALL &6ad,1,7,6
1890DATA &F1,ACALL &7ad,1,7,7
1900DATA &12,LCALL awaw,2,6,0
1910DATA &22,RET,0,9,0
1920DATA &32,RETI,0,9,0
1930DATA &01,AJMP &0ad,1,7,0
1940DATA &21,AJMP &1ad,1,7,1
1950DATA &41,AJMP &2ad,1,7,2
1960DATA &61,AJMP &3ad,1,7,3
1970DATA &81,AJMP &4ad,1,7,4
1980DATA &A1,AJMP &5ad,1,7,5
1990DATA &C1,AJMP &6ad,1,7,6
2000DATA &E1,AJMP &7ad,1,7,7
2010DATA &02,LJMP awaw,2,6,0
2020DATA &80,SJMP rl,1,8,0
2030DATA &73,JMP (A+DTPR),0,9,0
2040DATA &60,JZ rl,1,8,0
2050DATA &70,JNZ rl,1,8,0
2060DATA &40,JC rl,1,8,0
2070DATA &50,JNC rl,1,8,0
2080DATA &20,JB bt'rl,2,14,0
2090DATA &30,JNB bt'rl,2,14,0
2100DATA &10,JBC bt'rl,2,14,0
2110DATA &B5,CJNE A'dr'rl,2,14,0
2120DATA &B4,CJNE A'da'rl,2,14,0
2130DATA &B8,CJNE R0'da'rl,2,14,0
2140DATA &B9,CJNE R1'da'rl,2,14,1
2150DATA &BA,CJNE R2'da'rl,2,14,2
2160DATA &BB,CJNE R3'da'rl,2,14,3
2170DATA &BC,CJNE R4'da'rl,2,14,4
2180DATA &BD,CJNE R5'da'rl,2,14,5
2190DATA &BE,CJNE R6'da'rl,2,14,6
2200DATA &BF,CJNE R7'da'rl,2,14,7
2210DATA &B6,CJNE (R0)'da'rl,2,14,0
2220DATA &B7,CJNE (R1)'da'rl,2,14,1
2230DATA &D8,DJNZ R0'rl,1,13,0
2240DATA &D9,DJNZ R1'rl,1,13,1
2250DATA &DA,DJNZ R2'rl,1,13,2
2260DATA &DB,DJNZ R3'rl,1,13,3
2270DATA &DC,DJNZ R4'rl,1,13,4
2280DATA &DD,DJNZ R5'rl,1,13,5
2290DATA &DE,DJNZ R6'rl,1,13,6
2300DATA &DF,DJNZ R7'rl,1,13,7
2310DATA &D5,DJNZ dr'rl,2,14,0
2320DATA &00,NOP,0,9,0
2330DATA &100,LBL 00,0,15,0
2340DATA &101,LBL 01,0,15,1
2350DATA &102,LBL 02,0,15,2
2360DATA &103,LBL 03,0,15,3
2370DATA &104,LBL 04,0,15,4
2380DATA &105,LBL 05,0,15,5
2390DATA &106,LBL 06,0,15,6
2400DATA &107,LBL 07,0,15,7
2410DATA &108,LBL 08,0,15,8
2420DATA &109,LBL 09,0,15,9
2430DATA &10A,LBL 0A,0,15,10
2440DATA &10B,LBL 0B,0,15,11
2450DATA &10C,LBL 0C,0,15,12
2460DATA &10D,LBL 0D,0,15,13
2470DATA &10E,LBL 0E,0,15,14
2480DATA &10F,LBL 0F,0,15,15
2490DATA &110,LBL 10,0,15,16
2500DATA &111,LBL 11,0,15,17
2510DATA &112,LBL 12,0,15,18
2520DATA &113,LBL 13,0,15,19
2530DATA &114,LBL 14,0,15,20
2540DATA &115,LBL 15,0,15,21
2550DATA &116,LBL 16,0,15,22
2560DATA &117,LBL 17,0,15,23
2570DATA &120,EQUB da,1,3,0
2580DATA &121,EQUS tx,2,16,0
2590DATA &122,REM tx,2,16,0
2600DATA &A5,,0,0,0
3000DIMCM$(300),BY%(300),MD%(300),RA%(300),AD%(24)
3010MODE7:VDU23,1,0,0,0,0,0,0,0,0,0,0
3020FORX=0TO&11A
3030READOC
3040READCM$(OC)
3050READBY%(OC)
3060READMD%(OC)
3070READRA%(OC)
3080NEXT
3015P.TAB(4,12);"Please wait while data is read"
3090CLS:P."Open existing file or create new one? O/N"
3100A$=GET$
3110IFA$="O"ORA$="o"THENPROCOPEN:GOTO3200
3120IFA$<>"N"ANDA$<>"n"THEN3100
3130CLS:P."Enter the filename for the new file, 8 letters max."
3140INPUT":"A$
3150IFLEN(A$)=0ORLENA$>8THEN3140
3160AS$=A$+LEFT$("________",8-LENA$)+"/1"
3170CD$=A$+LEFT$("________",8-LENA$)+"/2":NM$=A$
3180LA%=0:LC%=0
3185P."Please enter a hexadecimal number for the PC":INPUT":"A$:X=EVAL("&"+A$):X=X MOD &10000:PC%=X
3190C%=OPENOUT(CD$):A%=OPENOUT(AS$):CLOSE#C%:CLOSE#A%:C%=OPENUP(CD$):A%=OPENUP(AS$):PRINT#A%,LA%:P.#A%,LC%:PRINT#A%,PC%
3200CLS
3210PROCSCREEN
3220CC%=0:PROCCOMS(CC%)
3230CS%=0:PROCSHOWASS(CS%)
3235CP%=1:AP%=1:PROCCURSOR(CP%)
3240A=GET
3250IFA=1ANDCC%=18THENCC%=0:PROCCOMS(CC%):GOTO3240
3260IFA=1THENCC%=CC%+1:PROCCOMS(CC%):GOTO3240
3270IFA=21THENPROCPAGEUP:GOTO3240
3280IFA=4THENPROCPAGEDOWN:GOTO3240
3290IFA=19ORA=24THENPROCCLOSE:CLS:END
3300IFA=60ORA=44THENPROCCURSUP:PROCCURSOR(CP%):GOTO3240
3310IFA=62ORA=46THENPROCCURSDW:PROCCURSOR(CP%):GOTO3240
3320IFA>47ANDA<58THENPROCNEWCOM(A-48):GOTO3240
3330IFA>64ANDA<71THENPROCNEWCOM(A-55):GOTO3240
3340IFA=23THENPROCDELETE:GOTO3240
3350IFA=3THENPROCASSEMBLE:P."Press any key to continue":A$=GET$:CLS:PROCSCREEN:PROCCOMS(CC%):PROCSHOWASS(CS%):PROCCURSOR(CP%):GOTO3240
3360IFA=6THENPROCDATATRANS:GOTO3240
3370IFA=16THENPROCNEWPC:PROCSHOWASS(CS%):GOTO3240
3600GOTO3240
9999END
10000DEFPROCOPEN
10010CLS:P."Enter filename, upto 8 letters."
10020INPUT":"A$
10030IFLEN(A$)=0ORLENA$>8THEN10020
10040AS$=A$+LEFT$("________",8-LENA$)+"/1"
10050CD$=A$+LEFT$("________",8-LENA$)+"/2":NM$=A$
10060C%=OPENUP(CD$)
10070A%=OPENUP(AS$)
10080INPUT#A%,LA%
10090INPUT#A%,LC%:INPUT#A%,PC%
10100ENDPROC
10110DEFPROCSCREEN
10120CLS:FORX=0TO24:P.TAB(15,X);"|";:NEXT
10130P.TAB(16,0);"CTRL-A TO STEP THROUGH";TAB(16,1);"PAGES OF COMMANDS";
10140FORX=0TO15:P.TAB(16,X+4);~X;"-";:NEXT
10150P.TAB(16,21);"CTRL-U CODE UP";TAB(16,22);"CTRL-D CODE DOWN";
10160ENDPROC
10170DEFPROCCOMS(Q%)
10172FORX=0TO15:P.TAB(18,X+4);" ";:NEXT
10180IFQ%>16THEN10300
10190FORX=0TO15:P.TAB(18,X+4);CM$(X+(Q%*16));
10200NEXT
10210ENDPROC
10300IFQ%=18THEN10400
10310FORX=0TO7:P.TAB(18,X+4);CM$(X+(Q%*16));
10320NEXT
10330ENDPROC
10400FORX=0TO3:P.TAB(18,X+4);CM$(X+&120);:NEXT
10410ENDPROC
10420DEFPROCSHOWASS(Q%)
10430FORX=0TO24:P.TAB(0,X);" ";:NEXT
10440X=0
10450IFQ%=0THENPRINTTAB(0,X);"<Start>":X=X+1:Q%=Q%+1
10460IFX>23THEN10700
10470IFQ%>LA%THENP.TAB(0,X);"<End>":X=X+1:GOTO10700
10480PTR#A%=(4*Q%)+11:Q%=Q%+1
10490OC%=((BGET#A%)*256)+(BGET#A%)
10500C1%=BGET#A%
10510C2%=BGET#A%
10520A$=CM$(OC%):BY%=BY%(OC%)
10530L%=0
10540IFBY%=0THEN10600
10550L%=L%+1:IFL%>LENA$THEN10600
10560X$=MID$(A$,L%,1):IFASC(X$)<96ORASC(X$)>122THEN10550
10562IFMD%(OC%)=16THENX$=LEFT$(A$,L%-1)+CHR$(C1%)+RIGHT$(A$,LENA$-L%):A$=X$:GOTO10570
10565X$=LEFT$(A$,L%-1)+RIGHT$("00"+STR$~C1%,2)+RIGHT$(A$,LENA$-(L%+1)):L%=L%+1:A$=X$
10570BY%=BY%-1:C1%=C2%:GOTO10540
10600P.TAB(1,X);A$;
10610X=X+1:GOTO10460
10700ENDPROC
10710DEFPROCPAGEUP
10720IFCS%<11THENCS%=0:PROCSHOWASS(CS%):PROCABSCURS :ENDPROC
10730CS%=CS%-10:PROCSHOWASS(CS%):PROCABSCURS :ENDPROC
10740DEFPROCPAGEDOWN
10750CS%=CS%+10
10760IFCS%>(LA%-10)THENCS%=LA%-10
10770IFLA%<11THENCS%=1
10780PROCSHOWASS(CS%):PROCABSCURS :ENDPROC
10790DEFPROCCLOSE
10800CLOSE#C%:PTR#A%=0:PRINT#A%,LA%:P.#A%,LC%:P.#A%,PC%:CLOSE#A%
10810ENDPROC
10820DEFPROCCURSOR(T%)
10830LOCAL L
10840FORL=0TO24:P.TAB(15,L);"|";:NEXT
10850P.TAB(15,T%);"[";
10860ENDPROC
10870DEFPROCCURSUP
10880IFCP%=0THENVDU7 ELSECP%=CP%-1
10885AP%=CS%+CP%
10890ENDPROC
10900DEFPROCCURSDW
10910IF(CP%+CS%)>LA%THENVDU7:ENDPROC
10920IFCP%=23THENVDU7 ELSECP%=CP%+1
10925AP%=CS%+CP%
10930ENDPROC
10940DEFPROCNEWCOM(T%)
10945LOCAL L,M
10948IFCM$((16*CC%)+T%)=""THENVDU7:ENDPROC
10950IFAP%>LA%THENGOTO12100
10960FORL=(14+(4*LA%))TO(11+(4*AP%))STEP-1
10970PTR#A%=L:M=BGET#A%:PTR#A%=L+4:BPUT#A%,M
10980NEXT
10990PTR#A%=11+(4*(CP%+CS%))
11000L=(16*CC%)+T%
11010BPUT#A%,L DIV256
11015BPUT#A%,L MOD256
11020FORM=0TO24:P.TAB(0,M);" ";:NEXT
11030P.TAB(0,0);CM$(L):BPUT#A%,0:BPUT#A%,0:PTR#A%=PTR#A%-2
11040M=BY%(L)
11050IFM=0THEN11100
11055IFMD%(L)=16THENP."Enter string":P."character":A$=GET$:BPUT#A%,ASC(A$):GOTO11095
11057IFMD%(L)=6ORMD%(L)=7ORMD%(L)=8ORMD%(L)=13ORMD%(L)=14THENPROCLABELENT:GOTO11100
11060P."Enter value":P."as a hex number"
11070INPUT":"A$
11080A$="&"+A$
11090BPUT#A%,EVAL(A$)
11095M=M-1:GOTO11050
11100REM
12000LA%=LA%+1:IFCP%>20THENPROCPAGEDOWN ELSEPROCSHOWASS(CS%)
12010PROCCURSDW :PROCABSCURS
12020ENDPROC
12030DEFPROCABSCURS
12040IFAP%>=CS%ANDAP%<(CS%+24)THENCP%=AP%-CS%
12050IFAP%<CS%THENCP%=0
12060IFAP%>(CS%+23)THENCP%=23
12070PROCCURSOR(CP%)
12080ENDPROC
12100PTR#A%=(4*LA%)+15
12110GOTO11000
12120DEFPROCDELETE
12130PTR#A%=(4*AP%)+11
12140BPUT#A%,1
12150BPUT#A%,&22
12160BPUT#A%,32
12170BPUT#A%,32
12180PROCSHOWASS(CS%)
12190ENDPROC
12200DEFPROCASSEMBLE
12205IFLA%=0THENVDU7:ENDPROC
12210CLS:P."Please wait while the code is assembled."
12212FORX=0TO23:AD%(X)=&7FFFFFFF:NEXTX
12213FORX=1TO2
12215LC%=0:PTR#C%=0
12220FORT%=1TOLA%
12230PTR#A%=(T%*4)+11
12240L=((BGET#A%)*256)+(BGET#A%)
12250C1%=BGET#A%
12260C2%=BGET#A%
12270M=BY%(L)
12275IFL>255ANDL<&118THENAD%(L MOD256)=PC%+LC%
12280IFL>255THEN12400
12290BPUT#C%,L:LC%=LC%+1
12291IFMD%(L)=6THENPROCLABEL6:GOTO12400
12292IFMD%(L)=7THENPROCLABEL7:GOTO12400
12293IFMD%(L)=8THENPROCLABEL8:GOTO12400
12294IFMD%(L)=13THENPROCLABEL13:GOTO12400
12295IFMD%(L)=14THENPROCLABEL14:GOTO12400
12300IFM=1THENBPUT#C%,C1%:LC%=LC%+1
12310IFM=2THENBPUT#C%,C1%:BPUT#C%,C2%:LC%=LC%+2
12400NEXT:NEXT
12410ENDPROC
12420DEFPROCDATATRANS
12425IFLC%=0THENVDU7:ENDPROC
12430DD%=OPENOUT("DATA0")
12435PTR#C%=0
12440FORT%=1TOLC%
12450L=BGET#C%
12460BPUT#DD%,L
12470NEXT:FORT%=LC%TO&FFF:BPUT#DD%,0:NEXT:CLOSE#DD%
12480ENDPROC
12500DEFPROCLABELENT
12600IFMD%(L)<>14THEN12650
12610P."Enter value as":P."hex number":INPUT":"A$:A$="&"+A$
12620BPUT#A%,EVAL(A$)
12650IFMD%(L)=6THENBPUT#A%,0
12660P."Enter label":INPUT":"A$:A$="&"+A$
12670IFEVAL(A$)<0OREVAL(A$)>23THEN12660
12680BPUT#A%,EVAL(A$)
12690ENDPROC
12700DEFPROCLABEL6
12710LC%=LC%+2
12720BPUT#C%,(AD%(C2%))DIV256
12730BPUT#C%,(AD%(C2%))MOD256
12740ENDPROC
12750DEFPROCLABEL8
12760LOCALN,B
12770LC%=LC%+1
12775IFX=1THENBPUT#C%,0:ENDPROC
12780N=PC%+LC%
12790B=AD%(C1%)
12800IF(B+127)<N OR(B-127)>N THENP."Out of range error":CS%=T%:AP%=T%:CP%=0:BPUT#A%,0:ENDPROC
12810BPUT#C%,((B-N)AND255)
12820ENDPROC
12830DEFPROCLABEL13
12840PROCLABEL8
12850ENDPROC
12860DEFPROCLABEL14
12865LOCALN,B
12870LC%=LC%+2
12880BPUT#C%,C1%
12890IFX=1THENBPUT#C%,0:ENDPROC
12900N=PC%+LC%
12910B=AD%(C2%)
12920IF(B+127)<N OR(B-127)>N THENP."Out of range error":CS%=T%:AP%=T%:CP%=0:BPUT#C%,0:ENDPROC
12930BPUT#C%,((B-N)AND255)
12940ENDPROC
12950DEFPROCLABEL7
12960LOCALB,N,P,O
12970LC%=LC%+1
12980B=AD%(C1%)
12990N=PC%+LC%
13000IF(N AND&F800)<>(B AND&F800)THENP."Wrong page error"CS%=T%:AP%=T%:CP%=0:BPUT#C%,0:ENDPROC
13010P=(B DIV256)MOD8
13020PTR#C%=PTR#C%-1
13030P=P*32
13040O=OC%AND&1F
13050O=O+P
13060BPUT#C%,O
13070BPUT#C%,(B MOD256)
13080ENDPROC
13090DEFPROCNEWPC
13100FORX=0TO24:P.TAB(0,X);" ";:NEXT
13110P.TAB(0,0);"Enter new value"
13120P."for PC in hex."
13130INPUT":"A$
13140A$="&"+A$
13150PC%=EVAL(A$)
13160ENDPROC
|