' +JJJJ ?\>m0M='+l> /+l   d]@ŵLҦ]]LF L}BBL] X  ` 鷎귭෍ᷩ췩緈JJJJx Lȿ L8ᷭ緍췩 緍i 8 `巬 췌`x (`(8`I`B` ``>J>J>VU)?`8'x0|&HhHh VY)'&Y)xꪽ)' `Hh`V0^*^*>&` aI꽌ɪVɭ&Y&&Y& 꽌ɪ\8`&&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`+*xS&x'8*3Ixix&& 8  '  & x)*++`FG8`0($ p,&"ųųೳŪŪųųij  !"#$%&'()*+,-./0123456789:;<=>?   1 '" *"( (9"1 ( ,.(0# 2  /#0/#0 *?'#07#00/0/'#07#0:"4<*55/**5/*%5/)1/)1/)1/)'#0/#0*5/*75/**5/*:5//#0/#0'#07#0:::*::'#07#0"):$(%"%:$(%"%$$2%4%$$2%4%$(2()!)E(!8b $!H(+ "@H !D)"E` @ $ C ` DQ &J80^݌Hh ü ü݌ ռ ռ ռA ļD ļ? ļAEDE?HJ>h Լ ռ ռ ռ`HJ>݌h Hh݌`葠葠ȔЖȔЖȠHIHHHHhHH݌hHhHh݌H6 ˆʎõĵL õ ĵµ aµ`` L̦µ_bJLuLz`  ȟ QlXJ̥KlV  ȟ QlV eօ3L e3L &RL &QL d L4 Ne)n `@-eff L f`L . tQLѤ LҦL` OPu d L Ne)noon 8ɍ` ^f\õL ^NR  RΩLҦ)\Z ʽ LHv 3h`0h8` [L NС õ`A@` ŵL^Lõ`  \ 濭0 \  ȟ Q ^\lZl^?cqH şch`fhjõĵ@OAP`u@`@&`QR`E Ls  @DAE@u`8` %@ @A@`@`@A`Mµ ) LЦ`8@AWc@8@-@HAȑ@hHȑ@ȑ@hHȑ@Ȋ@ch8&ȑ@Hȑ@Ah@LHȑ@ȑ@ htphso`hMhL`9V8U897T6S67`INILOASAVRUCHAIDELETLOCUNLOCCLOSREAEXEWRITPOSITIOOPEAPPENRENAMCATALOMONOMOPRINMAXFILEFINBSAVBLOABRUVERIF!pppp p p p p`" t""#x"p0p@p@@@p@!y q q p@  LANGUAGE NOT AVAILABLRANGE ERROWRITE PROTECTEEND OF DATFILE NOT FOUNVOLUME MISMATCI/O ERRODISK FULFILE LOCKESYNTAX ERRONO BUFFERS AVAILABLFILE TYPE MISMATCPROGRAM TOO LARGNOT DIRECT COMMANč$3>L[dmx- ( >  ֲ-@跻~!Wo*9~~~~ɬƬ~_ j ʪHɪH`Lc (L ܫ㵮赎 ɱ^_ J QL_Ls贩紎 DǴҵԵƴѵӵµȴ 7 ַ :ŵƴѵǴҵȴµ納贍﵎ٵ്ᵭⳍڵL^ѵ-I `  4 ò-յ!  8صٵ紭ﵝ 7L (0+BC  7L HH`LgL{0 HH` õL H hBL BH [ h`Lo õ ڬL B ڬ LʬH hB@ յյ [L (ȴ) ȴ 7L L ( L (ȴL{ƴѵ洩ƴǴҵ 7 ^* B0 HȱBh ӵԵ 8 L8 ݲ` ܫ  / / ED B / / ]ƴS0Jȴ ȴ)  紅D贅E B ƴ  / 0L Ν `HD٤DEEhiHLGh ` ŵBѵ-` ѵB-` ܫI볩쳢8 DH E𳈈췍Ȍ X0 · JLǵBȵC`,յp` 䯩 R-յյ`յ0` K R-յյ`ɵʵӵԵ` 4 K ( ѵҵLBȱBL8` DBHBH : ַ޵BȭߵBhhӵԵ RBܵmڵ޵ȱBݵm۵ߵ` 䯩LR˵̵ֵ׵`êĪLR E( 8` R` ELRŪƪ`췌 յյI뷭鷭귭ⵍ㵍跬ª 뷰` Lf ݵܵߵ޵ ^`8ܵ i B8` 4L ֵȱB׵ ܯ䵍൭嵍 ` DȑB׵Bֵ  ַ յյ`굎뵎쵬 뵎쵌``õĵBCõĵ`µµ`L õBĵCصص Qƴ0"Bƴ 󮜳` 0۰ϬBƴ8`i#`ЗLw!0>ﵭ` m ﳐ 7i볍 8 ЉLw`H h ݲL~ `浍국䵍뵩嵠Jm赍嵊mjnnn浈ۭm浍浭m䵍䵩m嵍`"L ŵ8ŵH ~(` d ֠z#e original. If they are not identical, then Diversi-COPY beeps and gives a 'Compare Error'. Comparison mode works with 1-drive, 2-drives, formatting and mass production. At the end of a mass production session, we recommend that you compare your originaer 'C' will appear in the lower right corner of the screen. To leave comparison mode, hit 'C' again (the letter 'C' will disappear). While in comparison mode, Diversi-COPY does not write duplicates. Instead it compares an already written duplicate to th12 - Verify error / compressed data NOTE: To copy 40-track disks, hit '*' from the main menu (requires 40-track drives). *** Comparing Disks *** Diversi-Copy can compare 2 disks to see if they are identical. To enter comparison mode, hit 'C'. The lettdrive or motor speed error 2 - Write protected 3 - No address mark (D5 AA 96) 4 - Volume mismatch 5 - Wrong track 6 - Bad address data 7 - No data mark (D5 AA AD) 8 - Data checksum error 9 - No DE trailer 10 - No AA trailer 11 - Verify error / wrong byte 64K Apple II+ with an extra 128K card is just a little short of the 200K needed, but will work for almost all originals if a few sectors are unused. *** Error Numbers *** For the technically oriented, here is a list of possible disk errors: 1 - Empty already have a //e with a 64K extended 80-column card, then buy a 128K card from Titan, Legend, Omega, Prometheus or Abacus. The Abacus 128K card is the most versatile for the hobbyist (313 524-2444), but the other companies are larger and better known. A 192K 'Neptune' extended 80-column card may also be used. If you're buying a new computer for mass production, we suggest that you get a //e without an 80-column card. Then buy the 192K 'Neptune' extended 80-column card from Titan (313 662-8542). If you y full disks, however, you'll need to add extra memory to your computer. You need a total of about 200K to copy any disk. Diversi-COPY automatically recognizes the 64K extended 80-column card in the Apple //e, and all 16K and 128K cards in any slot. Thehe keyboard. While Diversi-COPY is writing to drive #2, put a new disk in drive #1, and vice-versa. *** Extra Memory *** You can mass-produce newly formatted disks on any computer, since Diversi-COPY will compress the unused sectors. To handle completela blank disk in drive #1 and hit to write each copy. On a 2-drive system, put blank disks in drives #1 and #2 and hit 'A'. Diversi-COPY will write to drive #1 and #2 alternately until you hit or get a write error. You never have to touch tcan then write multiple copies from memory without re-reading the original. If the original disk does not fit into the available memory, the program displays an error message. Otherwise, you will hear 2 beeps and see a new menu. On a 1-drive system, put on them. This means you cannot boot these disks. Note: a DOS 3.3 formatted disk has 32 extra free sectors. *** Mass Production *** Put your original disk in drive #1 and hit 'M'. Diversi-COPY will read this original disk into memory and hold it. You $F48AINCR IN X AXIS INCRY $F504INCR IN X AXIS HCOLOR $F6F0SET HCOLOR PLOT $F45APLOT A PIXEL "IPOSN $F5CBSET UP EXT CURSOR MOVE $FE2CMOVE SUBROUTINE ; ;  $1800  $800 ; ; &LIFE4 $C050SET HGR FOR THE APPLE $FROM ADDRESS "PAGE $E6WHICH PAGE NOW USED CELL $FETEMP CELL HOLDER $COUNT $FFSTORES COUNT OF CELLS ; HGR2 $F3D8CLR HGR2 PAGE DECRX $F467DECR IN X AXIS "HPOSN $F411SET UP INT CURSOR DECRY $F4D5DECR IN Y AXIS INCRXSK A1L $3CMOVE REGISTERS A1H A1L+1 A2L $3E A2H A2L+1 A4L $42 A4H A4L+1 "COLOR $1CCOLOR MASK FOR PLOT LSBXCORD $E0LSB OF X-COORD MSBXCORD $E1MSB OF X-COORD YCOORD $E2Y-COORD $REGY $E5Y OFFSET  ********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * ********************* ; ; ; ADDR $26ADDRESS OF BYTE MSBADDR $27MSB OF ADDRESS MASK $30BIT MA? C ,,TL L 01&)` !@L   g             g   g      .'I`' ZL  'I`' Z'I`' YS  A>0, loop LOOP2 RESTORand return to DOS ; ; ; IOB 01IOB starts here IBSLT 60IOB slot IBDRVN 01IOB drive IBVOL 00IOB volume IBTRK 00IOB track IBSC 00IOB sector IBDCT DCTDCT address IBBUFR #$01 #$0A #$02 GETSCDone! RESTORand go to DOS ; %BOMB #$ABMake a strange buffer BUFFER+1 #$10Overwrite all of COUNTtrack $11 ! &LOOP2 COUNTDecrement the counter #$11 COUNT #$02 GETSCWrite the sector! #"V" PASS2.11 GETVAR  PAS2.0 ; ; PASS2.11: ; ; ; ; ; ; PAS2DONE: #0 CLSD CLOSE,X CLSD0 COUT  CLSD ; CLOSE 8D84 "CLOSE"  8D00 ; CLSD0 :  ; ; ; ; ; ; "DISASM.2" ; PAS2.0 ; PAS2.5 #"L" PAS2.6 PRTINST  PAS2.0 ; PAS2.6 #"P" PAS2.8 PRTPUSH  PAS2.0 ; PAS2.8 : #"I" PASS2.9 GETIGNOR  PAS2.0 ; PASS2.9 : #"O" PASS2.10 GETORG  PAS2.0 ; ; PASS2.10: WRITE,X MSG9.0 COUT  MSG9 ; WRITE 8D84  "WRITE DISASSEMBLY"  00 ; MSG9.0 : INPUT-1,Y #"H" PAS2.3 PRTHEX  PAS2.0 ; PAS2.3 #"S" PAS2.4 PRTASCII  PAS2.0 ; PAS2.4 #"W" PAS2.5 PRTADRS PAS2DONE ; GETNUM A2 STOPVAL A2+1 STOPVAL+1 ; ; ; TEST FOR IGNOR MODE ; INPUT,Y #"I" NOIGNOR ; ; TURN OFF WRITE DISK MODE ; #CR COUT #CTRLD COUT MSG9.0 ; ; TURN ON WRITE DISK MODE ; NOIGNOR : #0 MSG9INT OUT THE REQUIRED EQUATES ; EQU_EPZ ; ; "; HANDLE THE DISASSEMBLY COMMANDS ; PAS2.0 BLKDEL #"." PASS2.1  PAS2.0 ; PASS2.1 #"," PASS2.02  PAS2.0 ; PASS2.02#"I" PASS2.2  PAS2.0 ; ; PASS2.2 #CR *+5 : ; ; ; OPEN THE FILE "DISASSEMBLY" ; #0 MSG4LOOPMSG4,X MSG4XIT COUT  MSG4LOOP ; MSG4 8D84  "MON O,I,C"  8D84  "OPEN DISASSEMBLY"  8D84  "WRITE DISASSEMBLY"  8D  "INS"  8D  ";"  00 ; ; MSG4XIT : ; !; PR PASS1 ; PASS1.9 : #"O" PASS1.10 GETORG  PASS1 ; PASS1.10: #"V" PASS1.11 GETHEX  PASS1 ; ; PASS1.11: ; ; ; ; PAS1DONE:  ; ; ; ; PASS2- ACTUALLY WRITES THE "; DISASSEMBLED CODES OUT TO DISK. ; ; PASS2 PASS1.3 #"W" PASS1.5 GETADRS  PASS1 ; PASS1.5 #"L" PASS1.6 LIST  PASS1 ; PASS1.6 #"S" PASS1.7 GETHEX  PASS1 ; PASS1.7 #"P" PASS1.8 GETPUSH  PASS1 ; PASS1.8 : #"I" PASS1.9 GETIGNOR : ; #CR PAS1DONE ; ; !; ITS NOT A DELIMITER, THEREFORE ; IT MUST BE AN ADDRESS. ; GETNUM A2 STOPVAL A2+1 STOPVAL+1 ; ; SEE WHAT TYPE OF DISASSEMBLY ; COMMAND IT IS. ; INPUT-1,Y #"H" PASS1.3 GETHEX  PASS1 ; S1 ENTERS ALL ADDRESS ; REFERENCES INTO THE DISASM/65 ; SYMBOL TABLE. ; ; ; PASS1 : ; ; DELETE LEADING SPACES AND ; REMOVE ANY DELIMITERS. ; BLKDEL #"." PASS1.1  PASS1 ; PASS1.1 : ; #"," PASS1.2  PASS1 ; PASS1.2 E MONITOR OR BASIC WORKS ; OUT OK. ; #0 FILLCR #CR $200,X  FILLCR ; ; APLMONTR ; ; ; ; ; #; BLKDEL- "DELETES" LEADING SPACES ; FROM THE INPUT BUFFER. ; BLKDEL BLKDLOOP INPUT,Y #" " BLKDLOOP  ; ; ; ; PAS80 $D9 $75 ; ; ; LET PASS TWO BEGIN. ; DURING THIS PASS, THE DIS- ; ASSEMBLED CODE IS WRITTEN TO ; THE DISK. ; STARTLOC PC STARTLOC+1 PC+1 #0 PASS2 ; ; !; KLUDGY WAY TO FIX UP THE INPUT ; BUFFER SO THAT THE RETURN TO ; THTHE DISASSEMBLY BEGIN. ; ; ; ; FIRST, GO THRU THE CODE TO BE ; DISASSEMBLED AND GET ALL THE ; ADDRESS REFERENCES. ; DONE : STARTLOC PC STARTLOC+1 PC+1 #0 PASS1 ; ; !; TURN THE DISK OPERATING SYSTEM ; ON. ; DISKINIT #$ TEMP+1 ; ; INPUT-1,Y #"H" PARSE #"N" PARSE #"W" PARSE #"L" PARSE #"S" PARSE #"P" PARSE #"I" PARSE #"O" PARSE #"V" PARSE #CR DONE BADCMD ; ; "; OK, THE COMMAND IS A VALID ONE. ; LET  PARSE ; PARS1 #"," PARS2  PARSE ; PARS2 : #"I" PARS2.0  PARSE ; PARS2.0 : #CR DONE GETNUM A2 TEMP A2+1 TEMP+1 BADCMD ENDRANGE A2 ENDRANGE+1 A2+1 BADCMD ; A2 TEMP A2+13XIT : GETLN STARTLOC TEMP STARTLOC+1 TEMP+1 #0 ; ; ; CHECK THE INPUT LINE TO ; MAKE SURE THE ADDRESSES ARE ; IN THE CORRECT ORDER AND ; THAT THE DISASSEMBLY COMMAND ; IS SYNTACTICALLY CORRECT. ; PARSE BLKDEL #"." PARS1  TEMP #BELL COUT #0 ; PRTBAD INPUT,Y COUT  TEMP PRTBAD PRTBAD ; ; ; ; !; NORMAL GET-COMMAND ENTRY POINT ; GETCMD : #0 MSG3LOOPMSG3,X MSG3XIT COUT  MSG3LOOP ; MSG3 8D  "CMD"  00 ; MSGY RANGE. ; A2 STARTLOC BGNRANGE A2+1 STARTLOC+1 BGNRANGE+1 BADSTART ; ENDRANGE STARTLOC ENDRANGE+1 STARTLOC+1 BADSTART GETCMD ; ; ; ; ; ; READ THE DISASSEMBLY COMMAND ; FROM THE KEYBOARD. ; ; BADCMD : RT: #0 MSG2LOOPMSG2,X MSG2XIT COUT  MSG2LOOP ; MSG2 8D  "ENTER STARTING ADDRESS"  00 ; ; MSG2XIT : ; GETLN #$0 BLKDEL GETNUM ; ; !; CHECK STARTING ADDRESS TO MAKE ; SURE THAT IT FALLS WITHIN THE ; DISASSEMBLA2 BGNRANGE A2+1 BGNRANGE+1 ;  INPUT,Y #"." BADRANGE ;  GETNUM A2 ENDRANGE BGNRANGE A2+1 ENDRANGE+1 BGNRANGE+1 BADRANGE GETSTART ; ; ; GET STARTING ADDRESS ; ; BADSTART#BELL COUT ; GETSTAGE#BELL COUT ; ; GETRANGE: #":" PROMPT #$0 MSG1LOOPMSG1,X MSG1XIT COUT  MSG1LOOP ; MSG1 8D  "ENTER RANGE OF DISASSEMBLY"  00 ; ; ; INPUT DISASSEMBLY RANGE ; MSG1XIT : ; GETLN #0 BLKDEL ; GETNUM HICH READS IN ; THE DISASSEMBLY RANGE. ; PLEASE FORGIVE ME FOR THE ; SIMPLY (AND BULKY) I/O BEING #; PERFORMED HERE, I WANTED TO MAKE ; THE DISASSEMBLY OF DISASM/65 ; AS EASY AS POSSIBLE FOR THOSE ; PERSONS NOT PURCHASING THE ; SOURCE. ; ; BADRAN; START OF DISASM/65 ; ; ; START : #ARRAY TEMP /ARRAY TEMP+1 #0 ; ; ; CLEAR THE SYMBOL TABLE ; CLRLOOP #0 (TEMP),Y  CLRLOOP TEMP+1 TEMP+1 /ENDARY CLRLOOP CLRLOOP GETRANGE ; ; ; !; SECTION OF CODE W STLOOP ;        #ARRAY SYMADRS SYMADRS /ARRAY SYMADRS+1 SYMADRS+1 BITSET,Y #0 (SYMADRS),Y (SYMADRS),Y ; STFMTXIT:     ; ; ; BITSET 0102040810204080 ; ; ; ; ; ; ; ; ; ; SYMBOL TABLE IS ARRANGED AS ; AN ARRAY OF 65536 BITS ; (8K BYTES). IF A BIT IS SET #; THEN THAT ADDRESS WAS REFERENCED "; IN THE CODE BEING DISASSEMBLED. ; ; STOREADR   ; ; STADDRS : #0 #3 ; STLOOP : SYMADRS+1 SYMADRS  SYMADRS FIXREL0 SYMADRS+1 ; FIXREL0 SYMADRS STADDRS SYMADRS+1 STADDRS ; ; ABSLADR #1 (PCAUX),Y SYMADRS  (PCAUX),Y SYMADRS+1 STADDRS ; ; ; ; ; ; ; ; DISASM/65 SYMBOL TABLE ; MAINTENENCE ROUTINES ; ; ; NG HERE ; #1  (PCAUX),Y RELNEG ; PCAUX SYMADRS PCAUX+1 #0 SYMADRS+1 FIXREL ; ZPAGEADR#1 (PCAUX),Y SYMADRS #0 SYMADRS+1 STADDRS ; RELNEG PCAUX SYMADRS #$FF PCAUX+1 SYMADRS+1 ; FIXREL : R 8286924A NUMABS *-ABSADR+1 ; ; ; SETFMT :    ; FORMAT #NUMZPG ; ZPLOOP ZPGADR,Y ZPAGEADR  ZPLOOP ; #NUMABS ABSLOOP ABSADR,Y ABSLADR  ABSLOOP ; #$9DRELATIVE STFMTXIT ; ; RELATIVE ADDRESSI      ; ; ; PCADJ PCADJ2 LENGTH PCADJ3 PC+1  PCADJ4  ; PCADJ4 PC RTS2  RTS2 ; ; CHAR1 ",),#(L" CHAR2 "Y"  $0  "X$L"  $0 ; ; ZPGADR 8185914D59 NUMZPG *-ZPGADR+1 ; ABSAD PRNTAX PRBYTE PRNTX PRBYTE ; PRBLNK #3 PRBL2 #" " PRBL3 COUT  PRBL2  ; ; ; HEXOPCD :      ; #0 PRTHX3 HEX+1,X PRTHX4 COUT  PRTHX3 ; PRTHX4 : #0 (PC),Y PRBYTE ; R5 ; PRADR2 FORMAT PRADR3 CHAR1-1,X COUT CHAR2-1,X PRADR3 COUT ; PRADR3 PRADR1  ; ; PRADR4 PRADR2 PRBYTE ; PRADR5 FORMAT #$E8 (PC),Y PRADR4 ; RELADR PCADJ3   PRNTYX  ; PRNTYX #3  MNEML,Y LMNEM MNEMR,Y RMNEM ; PRMN1 #0 #5 ; PRMN2 RMNEM LMNEM   PRMN2 #0 PRMN3 HEXOPCD ; PRMN3 :  #"?" COUT  PRMN1 ; PRMN4 : PRBLNK LENGTH #6 ; PRADR1 #3 PRAD#$8F   #3 #$8A MNNDX3 ; MNNDX1 MNNDX3  ; MNNDX2 #$20  MNNDX2  ; MNNDX3 MNNDX1  ; ; ; SCRN2 RTMSKZ     RTMSKZ #$F  ; ; ; ; ; INSTDSP : ; #" " COUT INSDS1 PPLE MONITOR DISASSEMBLY ; ROUTINES. ; INSDS1 #0 (PC,X) ; INSDS2  IEVEN  ERR #$A2 ERR #$87 ; IEVEN  FMT1,X SCRN2 GETFMT ; ERR #$80 #$0 ; GETFMT FMT2,X FORMAT #3 LENGTH  E $FD6A FMT1 $F962 FMT2 $F9A6 MNEML $F9C0 MNEMR $FA00 APLMONTR $FF59 ; ; ; ; #; DOS 3.2 (3.3) INITIALIZE ROUTINE ; (ALSO $3EA) ; DISKINIT $A851 ; ; ; ; ; ; THE FOLLOWING ROUTINES ARE ; MODIFIED VERSIONS OF THE ; ASEARCH+2 ENDSRCH TMPSRCH+2 A2 ENDSRCH+2 BYTCNT A2+2 PCPLUS1 BYTCNT+2 ; ; ; ; ; MONITOR ZERO PAGE EQUATES ; PROMPT $33 ; ; ; ; ; ; ; MONITOR CALLS AND EQUATES ; ; PRYX2 $FD96 PRBYTE $FDDA COUT $FDED GTLIN1 LMNEM LENGTH+1 RMNEM LMNEM+1 SYMADRS RMNEM+1 TEMP SYMADRS+2 PCAUX TEMP+2 BGNRANGE PCAUX+2 ENDRANGE BGNRANGE+2 STOPVAL ENDRANGE+2 MODE STOPVAL+2 STARTLOC MODE+2 STOPPOSN STARTLOC+2 SEARCH STOPPOSN+2 TMPSRCH %  $6800  $800 " "LISA DISASSEMBLER VERSION 1.0" START ; ; ; ; CONSTANTS USED BY DISASM/65 ; BELL $87 CR $8D CTRLD $84 ; ; ; ; "; ZERO PAGE EQUATES FOR DISASM/65 ; PC $80 FORMAT PC+2 LENGTH FORMAT+               *********************** * * * APPLE PRINT USING * *  * *********************** ; ; ; CMD $19Command number EDSC $19Edits descriptor ,H,Ѕh`n 9bn\ 9b 9b ɍR$, 9bLHhІHh,0Ɉ ʎ$ɠ $` L0-M bPH7 -M bh:808` LЍLLN\ɠɊɎۭ\N8鰐- ),0 8n0 mmL0R7\ɍRL,p0׭\L/-M b$$ ]8tsii 󅽩LiiL#i$i%&iڍabbiabbi'bbb4bibbb5biiI8PQ c?BC ,ЍP    ✢D  ✢ܘ  DL𛩫TmTm L``ΡT1L&zSs VD \L $0' 0$Dp hT hh(T~LjD6Lhhhhx\@VLզHD &STv @p 7$]]@p ✩ $ i ✢ T rٍ ԧ 4= ]r r!`ᷩ췩 緍i 8 `DLݜޜ圩\TL `HDyHHT 0L jLxyۜ ڜᜩ✢T LD9H   IBSC 00IOB sector IBDCT DCTDCT address IBBUFR 0000IOB buffer  0000 IBCMD 00IOB command IBSTAT 00IOB errors 006001 ; DCT 0001EFD8 ; ;  0001EFD8 ; ;  BBUFR+1 #$01 #$0A #$02 GETSCand write it to disk  remove RTS from stack $E000and do BASIC cold start ; ; IOB 01IOB starts here IBSLT 60IOB slot IBDRVN 01IOB drive IBVOL 00IOB volume IBTRK 00IOB track$10Overwrite all of MCOUNTtrack $11 ! 'LOOP2 MCOUNTDcrement the counter #$11 MCOUNT #$02 GETSCWrite the sector! MCOUNTIf MCOUNT >=0, loop LOOP2 ; %FIXUPDOS#$6AFix up the DDOS patch $AB0B #$AE $AB0C /$AB00 Iu SET FORM SKIP8"TURN PRINTER ON & ";A$I(4);"PR#1"]((27);"N";(6)n2(4);"PR#0"t<E buffer #$00 #$01  GETSCDone! #$37Set X=54 "LOOP1 DOSCOPY,XModify sector BUFCOPY,X Decrement X register LOOP1 Now save Tk0,Sc0A #$01Modified, now save back #$02to disk Set no RWTS error condition GETSC "P8Get DDOS IDbyte (BUFFER+$12Is the disk byte the same?  ; ; (; Copydos: We must first modify Tk0,Sc1 '; as it contains the 'state' of DOS at &; bootup. We must also copy Tk0,ScA-C ; and Tk1,ScA ; COPYDOS /BUFFERRead Tk0,Sc1 IBBUFR+1into COPY2No ,goto COPY2 RESTORotherwise restore ; PRIME CHECKDOSIs DOS DDOS? BOMBNo, BOMB! #$40 DCOUNTIs DCOUNT>64? BOMBNo, BOMB! RESTOR Pull registers      $AE6Aand go back to DOS ; ; ; ; CHECKDOS#$0oto COPY1 RESTORotherwise, restore ; REGEN CHECKDOSIs DOS DDOS? REGEN1Yes, goto REGEN1 COPY2 #$80 MCOUNTSet MCOUNT=128 COPYDOSCopy the DOS #$00 MCOUNTMCOUNT=0 RESTORand restore REGEN1 #$0ADCOUNT < 10? DCOUNT  goto REGEN PRIMEIf 0, goto PRIME %MCOUNTotherwise, decrement MCOUNT CHECKDOSIs DOS DDOS? START1Yes, goto START1 COPY1 COPYDOSCopy the DDOS RESTORand restore to DOS (START1 DCOUNTCheck if MCOUNT8ȱ`ȱ`ȱ`ȱ`  L BL ٍӍ q LkɮLlɬLlLlɍLl Wsns L}lil Šms mLl TmLl nLl oLl EoLl ~qLl qLl [nLll ō`   ōL*L    L .L    L   L    s    . L #  L /  -   '    .   L L  L%      . L L  `  L. ` Ҡà͠ɠź o Ġ ɍʅ˅L M `  L . `3 Q = ٩3 ΠíčŠíčӍ  / ٠ L ҠL Ԡ L  . I ՠL ڠL  $I0 ; L  AAG=) Ll 0:, `, ` ) ee L `H HH hehe h` && ` . -    L H h`  ``hh  L+ l O-T7HAAKDL QL& Ġ L Ǡ L ʠ L ؠ L à  . -   L     L  L  . #     L % i 晥ś圐ԥśŜi 日ś圐J#6  ȱ 来 i 无LK `hh` @uL[ Hh`80`8`јȱ`i L;8 ` 1 L`  Ly  L̠ŠĠٍ̠ŠĠ٠Ӎ   SEUDO OPCODE ; DOPSEUD : PSEUDOP CONVERT ;   TNT BLKDEL OPRND3 #";" COUT #" " COUT OPRND2 ; OPRND4 : INCP OPRND2 ; ALLDONE : OPRND3 #$8D COUT INCP CONVERT ; ; ; ; ; HANDLE COMMENTS ; COMMENT #";" COUT INCP OPRND2 ; ; ; DOPSEUD- HANDLE PUT INCP (PNTR),Y OPRND1 ; OPRND0 #'/' OPRND1 COUT INCP (PNTR),Y ; OPRND1 #'-' OPRND2 #"!" COUT #"-" COUT INCP ; OPRND2 (PNTR),Y OPRND3 COUT ; #' ' OPRND4 DIDCMNT OPRND4 #1 DIDCMM0 INCP ; MNEM0 INCP (PNTR),YTEST FOR ACC MODE ALLDONE #' ' MNEM3 #";" COUT #" " COUT #1 DIDCMNT BLKDEL MNEM4 ; MNEM3 #0 DIDCMNT ; MNEM4 : ; ; HANDLE OPERAND FIELD HERE ; #'#' OPRND0 COCOUT (PNTR),Y #'.'CHECK FOR PSEUDO OP CNVRT5 DOPSEUD ; ; CNVRT5 : COUT INCP (PNTR),Y COUT INCP (PNTR),Y *+5 ALLDONE ; ; COUT #' ' MNEM0 INCP (PNTR),Y *+5 ALLDONE ; ; COUT #' ' MNE00 #0 PUTC PRINT  8D84 "CLOSE"  8D00 $E000 ; ; CNVRT0 : (PNTR),Y #'*'COMMENT? CNVRT3 COMMENT ; ; CNVRT3 : GETLBLHANDLE LABEL #0 CNVRT2 #":" COUT #$8D COUT INCP CONVERT ; CNVRT2 #" " ">" PROMPT PRINT  8D84  "OPEN SC-CONVERTED"  8D84  "WRITE SC-CONVERTED"  8D  "INS"  8D00 ; ; CONVERT : #0 INCP3 ; ; ; SEE IF WE ARE DONE YET ; PNTR ENDPGM PNTR+1 ENDPGM+1 CNVRT0 ; ; QUIT ; PRINT 858D LABEL (IF THERE) ; AND PRINTS IT. ; GETLBL : #0 LBLOOP (PNTR),Y LBLXIT #' ' LBLXIT COUT INCP LBLOOP ; LBLXIT BLKDEL  ; ; ; ; ; ; ; ; ; START : ; ; #":" PROMPT DISKINIT LOAD #$80 $D9 #PAG3 ; PRINT  8D84 "LOAD "  00 ; #0 LOAD1 PAG3,X COUT #$8D LOAD2  LOAD1 ; LOAD2 $CABASIC POINTER PNTR $CB PNTR+1 $4CBASIC END OF PROGRAM ENDPGM $4D ENDPGM+1 ;  ; ; ; ; ; GETLBL- GETSANKS ; BLKDEL : #0 (PNTR),Y #' ' BLKXIT INCP BLKDEL ; BLKXIT ; ; ; LOAD- LOADS AN SCASMII FILE ; LOAD : PRINT  8D  "ENTER SC ASM II FILENAME:"  00 ; GETLN LOAD0 INPUT,X PAG3,X  LOAD0 INPUT ЇPSEUD1 COUT #' ' PSEUD2 ; ; COMMENT HERE ; DIDCMNT PSEUD2 #";" COUT #" " COUT #1 DIDCMNT BLKDEL PSEUD0 ; PSEUD2 : INCP PSEUD0 ; PSEUD1 #$8D COUT INCP  ; ; ; !; BLKDEL- DELETES LEADING BL ; ASL4 ASL2 ASL2 ASL1 ASL1 ADDRESS ADDRESS+1  ; ; ; !; PSEUDXIT- PRINTS OPERAND FIELD ; PSEUDXIT: BLKDEL #'-' PSEUD5 #"!" COUT #"-" COUT INCP ; PSEUD5 : #0 DIDCMNT ; PSEUD0 (PNTR),Y ADDRESS+1 INCZ GETDEC ; ; ADRXIT :  ; ; ; ; ; ; ; "; MUL10- MULTIPLIES ADDRESS BY 10 ; MUL10 :  #0 ASL1 ADDRESS+1  ADDRESS  ASL2   ADDRESS ADDRESS  ADDRESS+1 ADDRESS+1   ; ; ; ; ASL4 GETHEX ; TSTDEC #'0' NOTDEC #'9'+1 NOTDEC ZERO  ; NOTDEC ALLONES  ; ALLONES $FF ZERO $0 ; ; ; GETDEC : (ZPAG),Y TSTDEC ADRXIT #$F MUL10  ADDRESS ADDRESS #0 ADDRESS+1 TR+1 ZPAG+1 ; ADRLOOP (ZPAG),Y #'$' GETHEX #$30 #10 GETDEC #$FF ADDRESS ADDRESS+1 ADRXIT ; GETHEX : INCZ (ZPAG),Y TSTDEC GOODHEX #'A' ADRXIT #'F'+1 ADRXIT #6 ; GOODHEX : #$F    ZPADR PRINT "EQU "  00 PSEUDXIT ; ZPADR PRINT "EPZ "  00 PSEUDXIT ; ; ; ; GETADR- CHECKS TO SEE IF DATA ; IN THE ADDRESS FIELD IS A ; ZERO PAGE VALUE OR NOT ; GETADR : ; #0 ADDRESS ADDRESS+1 PNTR ZPAG PN#'#' BYT #'/' ADR ; ; HBY HERE ; PRINT "HBY " ;  00 INCP PSEUDXIT ; ADR PRINT "ADR "  00 PSEUDXIT ; BYT PRINT "BYT "  00 INCP PSEUDXIT ; EQU : INCP BLKDEL GETADR ADDRESS+1 TE COUT ; ASC2 #0 (PNTR),Y DELIMIT ; ASC3 INCP (PNTR),Y DELIMIT ASC4 QUOTE ASC5 COUT ASC5 COUT ASC3 ; ASC4 QUOTE COUT INCP PSEUDXIT ; ; ; ; ".DA" HERE ; DATA : INCP2 BLKDEL  INCP2 PSEUDXIT ; ; ; ".HS" HERE ; HEX PRINT "HEX "  00 INCP2 PSEUDXIT ; ; ; ".AS" HERE ; ASC PRINT "ASC "  00 INCP2 BLKDEL #'-' ASC1 #""" QUOTE COUT INCP ASC2 ; ASC1 #"'" QUOINCP (PNTR),Y #'Q' NOTEQU EQU ; NOTEQU : ; ; ".EN" HERE ; PRINT "END "  00 INCP PSEUDXIT ; ; ; ".OR" HERE ; ORG PRINT "ORG "  00 INCP2 PSEUDXIT ; ; ; ".TA" HERE ; OBJ PRINT "OBJ "  00CHECKS ALL SC PSEUDO ; OPS AND CONVERTS THEM ; PSEUDOP : ; INCPMOVE TO NEXT CHARACTER #0 (PNTR),Y #'O' ORG #'T' OBJ #'H' HEX #'A' ASC #'D' NOTDATA DATA ; NOTDATA : ; ; ; ; ; MUST ".EN" OR ".EQ" HERE ; ; "; PRINT- OUTPUTS STRING FOLLOWING ; THE JSR PRINT ; PRINT : ASAVE YSAVE ;  ZPAG  ZPAG+1 ; #0 PRTLOOP INCZ (ZPAG),Y PRTXIT COUT PRTLOOP ; PRTXIT INCZ ASAVE YSAVE (ZPAG) ; ; ; ; ; ; PSEUDOP- OINTER ; INCP2-INCREMENTS POINTER BY 2 ; INCP3-INCREMENTS POINTER BY 3 ; INCP3 INCP INCP2 INCP INCP PNTR INCP0 PNTR+1 ; INCP0 ; ; ; ; INCZ- INCREMENTS ZPAG BY 1 ; INCZ ZPAG INCZ0 ZPAG+1 ; INCZ0 ; ; $FDED DISKINIT $A851 ; ; ; ; ; ; SCTOLISA: SEMI-AUTOMATIC ; CONVERSION FROM SC ASM II ; TO LISA 1.5 OR 2.0. ;  $800 ; ; START ; ; ; ; COUT- OUTPUT A CHARACTER ; COUT #$80 PUTC   ; ; ; ; ; INCP- INCREMENTS P: PNTR $0 ZPAG PNTR+2 ASAVE ZPAG+2 YSAVE ASAVE+1 QUOTE YSAVE+1 DELIMIT QUOTE+1 ADDRESS DELIMIT+1 ENDPGM ADDRESS+2 DIDCMNT ENDPGM+2 ; ; PROMPT $33 INPUT $200 PAG3 $300 GETLN $FD6F PUTC             ; NXTCHR ; ; GETNUM #0 A2 A2+1 ; NXTCHR INPUT,Y  #$B0 #$A DIG #$88 #$FA DIG  ; ;  ; INPUT $100 ;  $100+*&$FF00 ; ; ; ARRAY $2000 ENDARY *   0,X INPUT,X  GETLN0 ; #0 GETLN1 INPUT,X #CR GETLN2  GETLN1 GETLN3 ; GETLN2 #CR INPUT,X  GETLN2 ; GETLN3 :     ; ; ; ; DIG #3     ; NXTBIT A2 A2+1  NXTBIT UEPZ0 ; EQUXIT      ; ; ; ; PRTEPZ :    ; #0 PRTEPZ0 EPZ,X PRTEPZ1 COUT  PRTEPZ0 ; EPZ " EPZ "  00 ; PRTEPZ1    ; ; GETLN :    ; GTLINE #0 ; GETLN0 $20QUEPZ7 : SEARCH STOPPOSN SEARCH+1 STOPPOSN+1 *+5 EQUEPZ0 ; SEARCH #ENDARY SEARCH+1 /ENDARY EQUXIT ; SEARCH ENDSRCH SEARCH+1 ENDSRCH+1 *+5 EQUEPZ0 ; ; ENDSRCH SEARCH ENDSRCH+1 SEARCH+1 EQTMPSRCH PRBYTE PRTEPZ EQUEPZ6 ; EQUEPZ5 TMPSRCH+1 PRBYTE TMPSRCH PRBYTE PRTEQU ; ; EQUEPZ6 : #"$" COUT TMPSRCH+1 PRBYTE TMPSRCH PRBYTE   EQUEPZ2 ; ; EQUEPZ1 : SEARCH EQUEPZ7 SEARCH+1 ; ET,X (SEARCH),Y  SEARCH #ARRAY TMPSRCH SEARCH+1 /ARRAY TMPSRCH+1        TMPSRCH TMPSRCH+1  TMPSRCH TMPSRCH+1  TMPSRCH TMPSRCH+1 ; #CR COUT #"L" COUT TMPSRCH+1 EQUEPZ5 RAY+1 ENDSRCH ENDSRCH+1 /ARRAY+1 ENDSRCH+1 ; ; ; ; ; #ARRAY SEARCH /ARRAY SEARCH+1 #0 EQUEPZ0 : (SEARCH),Y *+5 EQUEPZ1 ; #7 EQUEPZ2 EQUEPZ3  EQUEPZ2 EQUEPZ1 ; EQUEPZ3 (SEARCH),Y BITSETOPPOSN STOPPOSN+1 STOPPOSN  STOPPOSN #ARRAY STOPPOSN STOPPOSN+1 /ARRAY STOPPOSN+1 ; ENDRANGE ENDSRCH ENDRANGE+1 ENDSRCH+1 ENDSRCH+1 ENDSRCH ENDSRCH+1 ENDSRCH ENDSRCH+1 ENDSRCH  ENDSRCH #AR; MSG8.0 : PC+1 PRBYTE PC PRBYTE #CR COUT #";" COUT ;       ; ; ; ; ; ; ; EQU_EPZ :      ; BGNRANGE STOPPOSN BGNRANGE+1 STOPPOSN+1 STOPPOSN+1 STOPPOSN STOPPOSN+1 SVAL #1 PC STOPVAL+1 #0 PC+1 ; ;       ; ; GETORG :      ; STOPVAL PC STOPVAL+1 PC+1 ; #0 MSG8 ORG,X MSG8.0 COUT  MSG8 ; ORG 8D  ";"  8D " ORG $"  00 .0    ; ; ; ; ; GETIGNOR:      ;  STOPVAL PC  STOPVAL+1 PC+1  GETIGN0  #1 ; GETIGN0     PRTDFS  PRBYTE  PRBYTE ; #CR COUT #";" COUT ;  STOPDR ;  PC #2 PC GETPUSH1 PC+1 ; GETPUSH1STOPVAL PC STOPVAL+1 PC+1 GETPUSH0 ;     ; ; ; PRTDFS :    #0 MSG7 DFS,X MSG7.0 COUT  MSG7 ; DFS 8D " DFS $"  00 ; MSG7PC+1 ; GETADRS1STOPVAL PC STOPVAL+1 PC+1 GETADRS0 ;     ; ; ; ; ; ; GETPUSH :    ; GETPUSH0: #1 (PC),Y SYMADRS+1  (PC),Y SYMADRS SYMADRS GETPUSH2 SYMADRS+1 ; GETPUSH2: STOREAGETHEX : ; PC GETHEX1 PC+1 ; GETHEX1 STOPVAL PC STOPVAL+1 PC+1 GETHEX ;  ; ; ; GETADRS :    ; ; GETADRS0: #0 (PC),Y SYMADRS  (PC),Y SYMADRS+1 STOREADR ;  PC #2 PC GETADRS1      ; ; ; ; ; ; LIST : ;    ; LIST0 : PC PCAUX PC+1 PCAUX+1 INSDS1 SETFMT INSTDSP PCADJ PC PC+1 ; #CR COUT STOPVAL PC STOPVAL+1 PC+1 LIST0 ;     ;   ; CHKTBL TBLCLC ; ; ; CLEAR BIT IN TABLE ; (SYMADRS),Y BITSET,X (SYMADRS),Y ; ; PRINT THE LABEL ; #CR COUT #"L" COUT PC+1 PRBYTE PC PRBYTE #":" COUT        ; TBLCLC ADRS PC+1 SYMADRS+1 #3 TSTLBL0 SYMADRS+1 SYMADRS   TSTLBL0 ;       #0  SYMADRS #ARRAY SYMADRS SYMADRS+1 /ARRAY SYMADRS+1 ; BITSET,X (SYMADRS),Y ;  ; ; ; TSTLBL :   #"$" COUT  TEMP PCAUX PRBYTE LBLTST ; LBLTST1 STOPVAL PC STOPVAL+1 PC+1 *+5 PRTINST0 ;     ; ; ; ; ; ; ; ; CHECK CURRENT ADDRESS TO #; SEE IF A LABEL IS REQUIRED HERE. ; ; CHKTBL : PC SYMBLTST0 PCAUX PC PCAUX+1 PC+1 LBLTST1 ; PC TEMP  PC+1  PCAUX PC PCAUX+1 PC+1 ; CHKTBL LBLTST #CR COUT #"L" COUT PCAUX+1 PRBYTE PCAUX PRBYTE PRTEQU #"*" COUT #"-" COUT    ; PRTINST0PC PCAUX  PC+1 PCAUX+1  ; TSTLBL #CR COUT INSDS1 INSTDSP PCADJ PC PC+1 ;  PCAUX+1  PCAUX PC  PC+1  ; LBLTST PC+1  PC PCAUX LBLTST0 PCAUX+1 ; L+1 PC+1 PRTPSH0 ; ;     ; ; ; ; ; ; ; HANDLE THE "EQU" STATEMENT ; PRTEQU   #0 ; PRTEQU0 EQU,X PRTEQU1 COUT  PRTEQU0 ; EQU " EQU "  00 ; PRTEQU1    ; ; ; ; PRTINST : CHKTBL DOPHSBYT PRTADR #"-" COUT #"1" COUT NXTPSH ; DOPHSBYTPRTBYT #"-" COUT #"1" COUT TSTLBL PRTHBY #"-" COUT #"1" COUT ; NXTPSH PC PRTPSH2 PC+1 ; PRTPSH2 : ; STOPVAL PC STOPVAL; ; ; ; ; HANDLE "ADR LBL-1" TYPE ; REFERENCES. ; ; PRTPUSH :    ; PRTPSH0 : #0  (PC),Y #1 PCPLUS1  (PC),Y #0 PCPLUS1+1 ; PC PCAUX PC+1 PCAUX+1 ; TSTLBL PC PRTPSH1 PC+1 ; PRTPSH1 PC PRTADRS1 PC+1 ; PRTADRS1CHKTBL DOBYTS ; PRTADR NXTADRS ; DOBYTS PRTBYT ; TSTLBL PRTHBY ; NXTADRS PC PRTADRS3 PC+1 ; PRTADRS3STOPVAL PC STOPVAL+1 PC+1 PRTADRS0 ;       ; ; NTADR  ; ; ; PRINTADR: #"L" COUT PCPLUS1+1 PRBYTE PCPLUS1 PRBYTE  ; ; ; PRTADRS : ;      ; PRTADRS0: PC PCAUX PC+1 PCAUX+1 #0 (PC),Y PCPLUS1  (PC),Y PCPLUS1+1 ; ; TSTLBL  ; ; PRTBYT #0 PRTBYT0 BYT,X PRTBYT1 COUT  PRTBYT0 ; BYT 8D " BYT "  00 ; PRTBYT1 PRINTADR  ; ; PRTHBY #0 PRTHBY1 HBY,X PRTHBY2 COUT  PRTHBY1 ; HBY 8D " HBY "  00 ; PRTHBY2 PRIOPVAL PC STOPVAL+1 PC+1 GETVAR1 ; ;       ; ; ; ; ; ; ; ; ; HANDLE ADR PSEUDO OPCODE ; ; PRTADR #0 PRTADR0 ADR,X PRTADR1 COUT  PRTADR0 ; ADR 8D " ADR "  00 ; PRTADR1 PRINTADR ETVAR1 : BYTCNT GETVAR2 BYTCNT+1 ; GETVAR2 : PC GETVAR3 PC+1 ; GETVAR3 : CHKTBL GETVAR4 ; PRTDFS BYTCNT+1 GETVAR5 PRBYTE ; GETVAR5 BYTCNT PRBYTE TSTLBL #0 BYTCNT BYTCNT+1 ; ; ; GETVAR4 : STBL PRTA4 NOTAPL TSTLBL  ; ; ; NOTAPL #""" COUT  ; FIXASC1 #""" COUT DOHEX4 ; ; ; ; ; ; ; ; GETVAR- HANDLE USER VARIABLE ; AREAS. ; GETVAR :      ; ; TSTLBL #0 BYTCNT BYTCNT+1 ; GPLASC: ; PRTASC #""" COUT ; #0 #0 PRTA4 #$20 NOTAPL (PC),Y NOTAPL #" " NOTAPL COUT #""" PRTA7 COUT ; PRTA7 : PC PRTA5 PC+1 ; PRTA5 STOPVAL PC STOPVAL+1 PC+1 FIXASC1 CHKT2 ; DOHEX1 PRBYTE #$20 DOHEX PC DOHEX3 PC+1 ; DOHEX3 STOPVAL PC STOPVAL+1 PC+1 DOHEX4 TSTLBL DOHEX DOHEX0 ; DOHEX2 ; DOHEX4 POP RTN ADDRESS  ; ; ASCDONE :       ; ; ; DOAXASC0 CHKTBL PRTA2 NOTASC TSTLBL  ; ; NOTASC #"'" COUT  ; FIXASC0 #"'" COUT DOHEX4 ; ; ; HANDLE UNPRINTABLE CHARS ; DOHEX PRTHX #0 #0 DOHEX0 (PC),Y #' ' DOHEX1 #$80 DOHEX2 #" " DOHEX ; NORMASC : PRTASC #"'" COUT ; #0 #0 PRTA2 #$20 NOTASC (PC),Y NOTASC #' ' NOTASC #$80 COUT #"'" PRTA6 COUT ; PRTA6 : PC PRTA3 PC+1 ; PRTA3 STOPVAL PC STOPVAL+1 PC+1 FINTS ASCII STRINGS ; PRTASCII:      ; TSTLBL ; PRTA0 : #0 (PC),Y PRTA1 #" " DOAPL DOHEX PRTA0 ; DOAPL : DOAPLASC PRTA0 ; PRTA1 #' ' DOASC DOHEX PRTA0 ; DOASC : NORMASC PRTA0 ;XXIT TSTLBL PRTHX2 PRTHX0 ; PRTHXXIT:       ; ; ; ; PRTASC- PRINTS "ASC" ; PRTASC : #0 PRTASC0 ASC,X ASCXIT COUT  PRTASC0 ; ASC 8D " ASC "  00 ; ASCXIT ; ; ; ; ; !; PRTASCII- PRI; ; ; ; ; PRTHEX- PRINTS HEX STRINGS ; PRTHEX :      ; TSTLBL ; PRTHX2 : PRTHX #0 #0 ; PRTHX0 #$11 PRTHX2 (PC),Y PRBYTE PC PRTHX1 PC+1 ; PRTHX1 STOPVAL PC STOPVAL+1 PC+1 PRTH$ ; DISASM.2 ; ; SEVERAL UTILITY ROUTINES TO ; SUPPORT PASSES ONE AND TWO. ; ; ; ; ; ; PRTHEX- PRINTS "HEX" ; PRTHX : #CR COUT ; #0 PRTHXLP HEX,X PRTHXIT COUT  PRTHXLP ; HEX " HEX "  00 ; PRTHXIT ;               #"V" PASS2.11 GETVAR  PAS2.0 ; ; PASS2.11: ; ; ; ; ; ; PAS2DONE: #0 CLSD CLOSE,X CLSD0 COUT  CLSD ; CLOSE 8D84 "CLOSE"  8D00 ; CLSD0 :  ; ; ; ; ; ; "DISASM.2" ;  PAS2.0 ; PAS2.5 #"L" PAS2.6 PRTINST  PAS2.0 ; PAS2.6 #"P" PAS2.8 PRTPUSH  PAS2.0 ; PAS2.8 : #"I" PASS2.9 GETIGNOR  PAS2.0 ; PASS2.9 : #"O" PASS2.10 GETORG  PAS2.0 ; ; PASS2.10: WRITE,X MSG9.0 COUT  MSG9 ; WRITE 8D84  "WRITE DISASSEMBLY"  00 ; MSG9.0 : INPUT-1,Y #"H" PAS2.3 PRTHEX  PAS2.0 ; PAS2.3 #"S" PAS2.4 PRTASCII  PAS2.0 ; PAS2.4 #"W" PAS2.5 PRTADRS PAS2DONE ; GETNUM A2 STOPVAL A2+1 STOPVAL+1 ; ; ; TEST FOR IGNOR MODE ; INPUT,Y #"I" NOIGNOR ; ; TURN OFF WRITE DISK MODE ; #CR COUT #CTRLD COUT MSG9.0 ; ; TURN ON WRITE DISK MODE ; NOIGNOR : #0 MSG9INT OUT THE REQUIRED EQUATES ; EQU_EPZ ; ; "; HANDLE THE DISASSEMBLY COMMANDS ; PAS2.0 BLKDEL #"." PASS2.1  PAS2.0 ; PASS2.1 #"," PASS2.02  PAS2.0 ; PASS2.02#"I" PASS2.2  PAS2.0 ; ; PASS2.2 #CR *+5 : ; ; ; OPEN THE FILE "DISASSEMBLY" ; #0 MSG4LOOPMSG4,X MSG4XIT COUT  MSG4LOOP ; MSG4 8D84  "MON O,I,C"  8D84  "OPEN DISASSEMBLY"  8D84  "WRITE DISASSEMBLY"  8D  "INS"  8D  ";"  00 ; ; MSG4XIT : ; !; PR PASS1 ; PASS1.9 : #"O" PASS1.10 GETORG  PASS1 ; PASS1.10: #"V" PASS1.11 GETHEX  PASS1 ; ; PASS1.11: ; ; ; ; PAS1DONE:  ; ; ; ; PASS2- ACTUALLY WRITES THE "; DISASSEMBLED CODES OUT TO DISK. ; ; PASS2 PASS1.3 #"W" PASS1.5 GETADRS  PASS1 ; PASS1.5 #"L" PASS1.6 LIST  PASS1 ; PASS1.6 #"S" PASS1.7 GETHEX  PASS1 ; PASS1.7 #"P" PASS1.8 GETPUSH  PASS1 ; PASS1.8 : #"I" PASS1.9 GETIGNOR : ; #CR PAS1DONE ; ; !; ITS NOT A DELIMITER, THEREFORE ; IT MUST BE AN ADDRESS. ; GETNUM A2 STOPVAL A2+1 STOPVAL+1 ; ; SEE WHAT TYPE OF DISASSEMBLY ; COMMAND IT IS. ; INPUT-1,Y #"H" PASS1.3 GETHEX  PASS1 ; S1 ENTERS ALL ADDRESS ; REFERENCES INTO THE DISASM/65 ; SYMBOL TABLE. ; ; ; PASS1 : ; ; DELETE LEADING SPACES AND ; REMOVE ANY DELIMITERS. ; BLKDEL #"." PASS1.1  PASS1 ; PASS1.1 : ; #"," PASS1.2  PASS1 ; PASS1.2 E MONITOR OR BASIC WORKS ; OUT OK. ; #0 FILLCR #CR $200,X  FILLCR ; ; APLMONTR ; ; ; ; ; #; BLKDEL- "DELETES" LEADING SPACES ; FROM THE INPUT BUFFER. ; BLKDEL BLKDLOOP INPUT,Y #" " BLKDLOOP  ; ; ; ; PAS80 $D9 $75 ; ; ; LET PASS TWO BEGIN. ; DURING THIS PASS, THE DIS- ; ASSEMBLED CODE IS WRITTEN TO ; THE DISK. ; STARTLOC PC STARTLOC+1 PC+1 #0 PASS2 ; ; !; KLUDGY WAY TO FIX UP THE INPUT ; BUFFER SO THAT THE RETURN TO ; THTHE DISASSEMBLY BEGIN. ; ; ; ; FIRST, GO THRU THE CODE TO BE ; DISASSEMBLED AND GET ALL THE ; ADDRESS REFERENCES. ; DONE : STARTLOC PC STARTLOC+1 PC+1 #0 PASS1 ; ; !; TURN THE DISK OPERATING SYSTEM ; ON. ; DISKINIT #$ TEMP+1 ; ; INPUT-1,Y #"H" PARSE #"N" PARSE #"W" PARSE #"L" PARSE #"S" PARSE #"P" PARSE #"I" PARSE #"O" PARSE #"V" PARSE #CR DONE BADCMD ; ; "; OK, THE COMMAND IS A VALID ONE. ; LET  PARSE ; PARS1 #"," PARS2  PARSE ; PARS2 : #"I" PARS2.0  PARSE ; PARS2.0 : #CR DONE GETNUM A2 TEMP A2+1 TEMP+1 BADCMD ENDRANGE A2 ENDRANGE+1 A2+1 BADCMD ; A2 TEMP A2+13XIT : GETLN STARTLOC TEMP STARTLOC+1 TEMP+1 #0 ; ; ; CHECK THE INPUT LINE TO ; MAKE SURE THE ADDRESSES ARE ; IN THE CORRECT ORDER AND ; THAT THE DISASSEMBLY COMMAND ; IS SYNTACTICALLY CORRECT. ; PARSE BLKDEL #"." PARS1  TEMP #BELL COUT #0 ; PRTBAD INPUT,Y COUT  TEMP PRTBAD PRTBAD ; ; ; ; !; NORMAL GET-COMMAND ENTRY POINT ; GETCMD : #0 MSG3LOOPMSG3,X MSG3XIT COUT  MSG3LOOP ; MSG3 8D  "CMD"  00 ; MSGY RANGE. ; A2 STARTLOC BGNRANGE A2+1 STARTLOC+1 BGNRANGE+1 BADSTART ; ENDRANGE STARTLOC ENDRANGE+1 STARTLOC+1 BADSTART GETCMD ; ; ; ; ; ; READ THE DISASSEMBLY COMMAND ; FROM THE KEYBOARD. ; ; BADCMD : RT: #0 MSG2LOOPMSG2,X MSG2XIT COUT  MSG2LOOP ; MSG2 8D  "ENTER STARTING ADDRESS"  00 ; ; MSG2XIT : ; GETLN #$0 BLKDEL GETNUM ; ; !; CHECK STARTING ADDRESS TO MAKE ; SURE THAT IT FALLS WITHIN THE ; DISASSEMBLA2 BGNRANGE A2+1 BGNRANGE+1 ;  INPUT,Y #"." BADRANGE ;  GETNUM A2 ENDRANGE BGNRANGE A2+1 ENDRANGE+1 BGNRANGE+1 BADRANGE GETSTART ; ; ; GET STARTING ADDRESS ; ; BADSTART#BELL COUT ; GETSTAGE#BELL COUT ; ; GETRANGE: #":" PROMPT #$0 MSG1LOOPMSG1,X MSG1XIT COUT  MSG1LOOP ; MSG1 8D  "ENTER RANGE OF DISASSEMBLY"  00 ; ; ; INPUT DISASSEMBLY RANGE ; MSG1XIT : ; GETLN #0 BLKDEL ; GETNUM HICH READS IN ; THE DISASSEMBLY RANGE. ; PLEASE FORGIVE ME FOR THE ; SIMPLY (AND BULKY) I/O BEING #; PERFORMED HERE, I WANTED TO MAKE ; THE DISASSEMBLY OF DISASM/65 ; AS EASY AS POSSIBLE FOR THOSE ; PERSONS NOT PURCHASING THE ; SOURCE. ; ; BADRAN; START OF DISASM/65 ; ; ; START : #ARRAY TEMP /ARRAY TEMP+1 #0 ; ; ; CLEAR THE SYMBOL TABLE ; CLRLOOP #0 (TEMP),Y  CLRLOOP TEMP+1 TEMP+1 /ENDARY CLRLOOP CLRLOOP GETRANGE ; ; ; !; SECTION OF CODE W STLOOP ;        #ARRAY SYMADRS SYMADRS /ARRAY SYMADRS+1 SYMADRS+1 BITSET,Y #0 (SYMADRS),Y (SYMADRS),Y ; STFMTXIT:     ; ; ; BITSET 0102040810204080 ; ; ; ; ; ; ; ; ; ; z#??    @Įà "ͮԠ'ͮ& Ԡ Ԡ Ҡؠ Рֲ ͮŠ:ͮŮ2ͮŮŠ% ӠӠӠ2 Ӯ,` iw`LxLx`'`(` l l ol h1 l o ol h2 Lm l x x` h **END OF PASS `@ `󅯩Ll8e |wMISSING 'END'L`ȱL!m;*à L!m n &eheh`I0  jeI0`HHH hhh`HHHLkhhh`L/` #f Fe Nc`` a b`ELlLmL|wLkLk x` t2jH7j hLih ɰ, fjhh` d' { 0`:0`` Gi [i i ii i i i iLQi ``HHH h fjL~j) B 2 4 " fjƩ/ fj b L|j Lj fjLj Lj fLj bhhh`H&H&( )? i(`@#i05i`޼άݍ``Li` Gi [i i iiLQi fj iLi` Gi [i i ii i i iLQi`Hȱh` Gi [i i ii i i i iLQi Gi JLQiHH8L[  "LIST P5.L" ; TRUE 1 FALSE 0 HAS64K FALSE ; ; HAS64K  $D000   $7800  ;  $800 ;: ;: P5LwjLuiLgkL,kLBjL kLrjLiLfjLKjLiLiL[iLiiH h ɓ)I(Lhɛ  iLh hH(h)h` IAIA `$N 2.5D -- 48K L/`B@fm a g h BLOAD a h,A$ ZgLg h BAD FILENAME ` LHH 8b ghhL8b@> a g h BSAVE a h,A$ Zg h,L$ g h ` 8b8 1b 1b L L!` < h afɻ h e 1b`8 h af h L;fffjf af h Lhd ة``-`Vʩ/V X h LAZER SYSTEM'S INTERACTIVE SYMBOLIC ASSEMBLER (C) 1981 LAZER SYSTEMS VERSIODREQUORGOBJEPZSTRDCMASCICLENDLSTNLSHEXBYTHBYPAUDFSDCIPAGINVBLKDBYTTLSBCLET.IF.EL.FI= PHSDPH.DAGENNOGUSRLfȱ0M*;Lf00 H :hLe h : h Lfh:Le af afLe h)H hemcmcH hBCCBCSBPLBNEBEQBVSBVCBSBBNMBM1BNZBIZBIMBIPBICBNCBRABTRBFLBRKBKSCLVCLCCLDCLIDEXDEYINXINYNOPPHAPLAPHPPLPRTSRTIRSBRTNSECSEISEDTAXTAYTSXTXATXSTYAADDCPRDCRINRSUBLDDPOPPPDSTDSTPLDRSTOSETADCANDORABITCMPCPXCPYDECEORINCJMPJSRLDALDXLDYSTASTXSTYXORLSRRORROLASLA a  b`iiL9cL9c a,ɠ,ɃL/` Hf ke sc`` a b`H b ah` bh a, a b` b sc a b 8b b h`ei 8b b h`H bhH zch ]b`cBGEBLTBMIhh```````HH (beihh` 8b a b` b a b b h b a sc b hL8b h h8` hBAD # ` a > b` b a,AR? h a)YLnf` aH !` h OPEN a hhH h WRITE,  h h INS (b ke scLSa h CLOSEhLa !` a h  `a)_ hLa   a ` (b#e 1bLa`HH O`6LnfL/`L,`L;`LLkeL8bLHfLaXc>LQ _` b hpt^! h h a>fm̍م3vua)_ݞ`4)_ݯ`* h WHAT? L;`BLLSAIDLANMWF ROEAP`` `L;`led]z tg`ggbcbk`ca``aaa,L gL h CLE                   Lz{|ߦ X0 Ǡpd Le L|LĠͮŮİĠͮŮİ L`ӠĠͮŬȱ#/, k$pLz L[x k$pLz L[x' ȱ L[x"ȱ L[x0 ȱ A)ȱ L|A) L[xi) IIl h k$pLz L[xh8鿪| L}a!AAh8鿪 kUNDEFINED SYMBOLL[x L[xy9YYh" k$pLTzLz L[x8H ꂥ9$phLzh{ L[x}=]]^~>$phLTzh{ L[xu5UUVv6h8Ԫ{ L[xJj* h8鿪| L[x`pHȱ +z+zl{;}{|||<{;zh>Lz k$pA kUNDEFINED SYMBOL-MUST BE ZPAGE.L[x k$PȥK 7 kADDRESSING MODE REQUIRES ZPAGE VARIABLE.L[x L[x8鿪#{ k$p" ED SYMBOLL[x8噅嚅ƚƙ&( kBRANCH OUT OF RANGEL[x0 L[x0pP ɼ+8鲪zHȱ@ȱA8)h L[xɾ.ɽȱ@ HLy@HLyȱ@0HLyȩPHLyȱA8)  k$pLz *ILxLLQLLLL멀vم􅢅򅡠 Lpx 8e륙ȱ0 ;*Ӡ ؐL}ɲ LwyLzɖLx8閪x L[x XʈHh(`@ 8x8逪ay k$p kUNDEFINhEhELv=,HH thőhŒhLvhLv#LvHH thőhŒ iw`Lv,L ` x h **ERROR AT LINE h: h h h h h h h C)ONTINUE OR A)BORT? h)AL``L``;" ) ImLuHh+HH thehe `-HH t8h呅h咅 `*$HH thh  `/$HH thh  `|HH thhLv&HH th%h%ĩLv^HH t!I%Lu'Lu"Lu h= |w** DAMAGE ** ILLEGAL CHARACTER IN OPERAND`ȱ-L[u yo 8呅咅Lv oLvȱꅑȱLvȱ Lu8ȱLvH iw h`hLvȱ 5mA8Lp |wSTY ABS,X NOT ALLOWEDLoL7qF t2LpL7q |wABS,Y IS NOT ALLOWED.LoL7q tL7qLp t ow ow,Loȱ'" t ow,Lo tLtȱꅝȱŝȱŝ owLt`$Lu< >A[Lu*Lu s` rL`8eȱ`% k$pLqLoeeLoJȱ ?,ȱ# ow kLus/ ow kLus'" tLus ow ow kLusLoLoLo )LoȱLpLpLp5 tFORWARD REFERENCE.Lo |wEQU W/O LABELLoLoLoLoLoLtLtLoLtLoLoLo6L2s sLo rLo |wUNMATCHED IF/EL/FI` |wNESTED IF'S NOT ALLOWEDL` rLo t$p |wUNDEF SYMBOLLo ow owLo ɾ* owLoLtԐذȱ t ow ow owLoLsȱ 5m owLKqLo t owLo  tLoL\m mLo k$PQLo& k$P5eeeeLo5 t$P Lo |wILLEGAL ;*^ l :Lp iwLtp1  kȥLo |wDUPLICATE LABELLo Lo lLo :a^& |wLOCAL LABELS MAY NOT BE EQUATEDLo k$P lLo |wUNDEF. SYMBOL/ILLEGAL ADDRESSLo l ɖ n+HH nhehe `-HH n8h呅h咅 ` iw; |wSYMBOL WAS NOT PREVIOUSLY DEFINED IN AN EPZ STATEMENT.`LnȢ hL|oH hᅒh`ȩ1 0&&Lo8&&Lo`Lo8eȱLp ` ` h h BLOAD "' h h,A$` ` ` h`>fm`@>fm`$RA[L6o!3%7 hLn |wILLEGAL OPERAND IN ADDRESS FIELD` yoLn oLnȱ 5mA8) ImLɻ |wVALUE > $FF` lLl nLlL\m mLlLl0 : AG`8`&&&&`#Zm[m l`  yn h BLOAD TEMP. @ Lmn rL` yn]  h BSAVE TEMP.,A$ ` ` h,L$HH `hh8 ȹRrLՋɾ.ȹ ,"hh SILLEGAL SWEET-16 REGISTERLLȩ ,L"ȹ,` fL ;L8` f`L#L/L(L# hLV @L*L$L'L"L!L%L<>Lhh SILLEGAL SYMB  L+xt8`xrirsL护t` `uɖLɲLɿLƋ԰LذLjLL&'# `L !;hh SOPERAND NOT ALLOWEDL8`R)r%@)hh SILLEGAL SWEET-16 OPERANDLLL`r`s / SILLEGAL OPERAND.L ђ SILLEGAL ADDRESSING MODE.LH `;* + SILLEGAL BLANK IN OPERAND FIELDhLhH uh   t  `txtr=a)r : SBAD LOCAL LABELL^Lj @ SBAD CHARACTER IN LABELL @=#  :Ź: LL  : ` ` @V.=E SILLEGAL MNEMONIC.LD/ ( SLABEL NOT ALLOWED HERELE5 LL=LuLL7i( SMEMORY FULL`e` h h^ h h **ERROR: h h h h h` Q h8``  ` h L Q h  `*; Ȍ `^< h  TC SADR OUTC (PNTR),Y #',' P2DBY PRLN P300 ; ;: ; HBY PSP1L 0E6 PSP1L2  P2HBY0 :  GDR2 AFND PSP2L USYM ; PSP2L SADR+$1 OUTC (PNTR),Y #',' P2HBY0 PRLN P300 ; ; BYT ; PSP1L2 0 ɻ hL: h ɻ hL : h ɮ hL ɍ h h h h h`HHH$`) %`&`$`) xhhh` h h hhhhhhh` x`LLPAUSE ENCOUNTEREDL[" $pLҥ L[_ $pLADR+$1 OU嵐 kSYM TABLE FULLL`ȥȩ`H phi쥵퐯8ƵȱȥȥL,쥕i Lz`HH p ȥȩhh` ``H h LISA 2.5 h h I ` hĢ h L h ` h t`HH0;*  ` ` hhh` k `LYHH ` h `hh`0 : AG`8`쥕^:&#L, kDUPLICATE LABELL,i LŴL暤梤`ꅝȱŝȱŝ`ꅝȱŝȱŝ" % LA`,0`ɠ,Ƀ,L`,`櫥` `` ` 1} ` hĢ h h h섘 h ti9Ģ3 1` $P L[xLz L[x_ȱ"' <, L[x# $P LM/ $P LM $P LM  L[x L[x  ) L[x 1 h t h ***** END OF ASSEMBLY ` kƚƙ`hhh kLpx6  kLET W/O LABELL[x k ꂠȥ L[xC.L L[x kUNMATCHED IF/EL/FIL[x ܁ݩL[x kNESTED IF'S NOT ALLOWEDL` L[x $p Lz  ܁`8eH hȱL[x+ȱꅝȱŝ L L[x8ȱ * &ɻ"A) ȱA) L6 L[x, kFLOATING POINT NOT YET IMPLIMENTEDL[x  L[x L[x2مvu x h ȱꅝȱŝ hLӀ h h L[xHHH $pLz, ƻƺL eeee L[x $pLz L[x L[xȥ쥚  Lȩ < L[x4ȩ <IƜƛI L[x? < L[x?@ < " $pLz , L[x $pLz , L[x:ȱ"' <, $pLz , L[x  L[x L[x kPAUSE ENCOUNTEREDL[x" $pLz L[x_ $pLz,-} L}q1QQ k$pLTzLz L[xh L k$pLz L[x LE}H $phLz'h8鿪} LP}m- ,MMNn.h8鿪} L[xe%$EEFf&" $pLz , L[xЍLҭrs Ґ /Ӱ SILLEGAL OPERAND.L ڰ SILLEGAL ADDRESSING MODE.LИH ;* + SILLEGAL BLANK IN OPERAND FIELDhLЩhH uh   t  `txtr=a)r : SBAD LOCAL LABELLЍ^Lj Jڰ SBAD CHARACTER IN LABELLй Jڙ=#  ܐ:Ź: LLј  : `  JڰV.=E SILLEGAL MNEMONIC.LйD/ ( SLABEL NOT ALLOWED HERELЩ0LLGLLLNݬi( SMEMORY FULL`e` ^ **ERROR: ` Q 8``   L Q  `*; Ȍ `^<                 I 0 IFCNT P300 ; IFERR3 ERRR  'UNMATCHED IF/EL/FI'  00 P300 ; P3EL PRLN DELIF IFCNT IFERR3 #0 IFCNT P300 ; P3IF : IFCNT GOODIF ERRR  'NESTED IF''S NOT ALLOWED'  00 WARMST ; GOODIF : TSTIF `ȱvȱHHŴ嵐fv 8㥶ȱřȱ嚰,深셹셸Lȱřȱ嚰L셒셑Lqhhh8`Lehhh` L[ PAUSE ENCOUNTEREDL[" $pLҥ L[_ $pLIFERR3 # hBSAVE ASM.CODE,A$6000,L$36B0,D2 eзL`H>L<Lꕱ ;+7-3,/)+ɻ'*#/|&^=# H H쥕4#Lϕ8셑ȱ셒Li Lhhh`L'`( :,6)2(.+*-&;" */|^& =#8``HHHJ eeffff㥨hhh`HHH&&&8呪咐樈㥨hhh`ȹ `  Fȱ" LLГLߓ L8`Ӄ͊`8`K͊X͊b͊t͊͊͊hhhhLv vȹv , 8`0 : AG`8`A[ a{)8``ȹ , ȹ ,ȹ ' # SILLEGAL IMMEDIATE HEX DATAhhL8`ȹ # SILLEGAL IMMEDIATE ASCII DATALLDLL 8``L ݐ ` 1  8`hh SCOMMENT NOT ALLOWED HERELL ,'ȹ , SNOT ENOUGH DIGITS.hhL   SILLEGAL HEX DIGIT.hhL8` SILLEGAL OPERAND / INSTRUCTION TYPEhhL'" SILLEGAL STRING, (ȹ f(`L`8``L f,ȹL,'" fȹ,пL? LO hh SMISSING OPERANDL# fL/ fL'" L f,ȹL 0 ȹLhh SEXTRA STUFF IN OPERAND FIELDL8`Cȹ';ȩyLr"ȹ $ȹ"ȩyLr;y hL`8`yȹ @  SLABEL TOO LONG`+- f`*/&|^=#), ;`8`  08 ِ7ݰ3 f`  8` f `8` f`,)`Lȹ)X$Y+hh SONLY "X" OR "Y" ALLOWEDLLLy* ȩyLr$yȹ ,Lr`><ȹ hLAȹLr!-Ȣyȹ hLr`%yȹ01Lr` @S'ȹ OL IN OPERAND FIELDL f`L f`){,%hh SMISSING ",X)", "),Y", OR ")"Lȹ)X!hh SONLY "(,X)" ALLOWEDLȹ)hh SMISSING ")"LLȹ , `8`ȹ)Yhh SONLY (),Y ALLOWEDLȹ hh```````HH (eihh` 8 `    ᭈ s  L8 8` BAD # ` > ` ,AR? )YLn` H ! OPEN hH WRITE,  INS ( k sLS CLOSEhL !  `a)_ L   ` (#e 1L`HH O00 LnL/L,LLLkL8LHL>LQ ` pt^! >fm̍م3vua)_ݞ4)_ݯ* WHAT? L;BLLSAIDLANMWF ROEAP L;led]z t,L L CLEGENFLG ; 08 LOCC+$01 CODE+$01 LSAV+$01 ;: 00 LOCC CODE LSAV CDSP LNUM+$01 #!40 LINCNT ;: 01 LNUM PRTR ;: 00 #' ' STRLP TTL,Y  #$20 STRLP ; ; #$0 P301 ;: P3P3 PRLN ;: P3h`L ީ'(ȱvȱHHŴ嵐fv 8㥶ȱřȱ嚰,深셹셸L3ȱřȱ嚰L3ޱ셒셑Lޥhhh8`L|hhh`Lr!-Ȣyȹ Lr`%yȹ01Lr` @ RUNINT Fȱ" FOUND AT LINE # eзL`H>L<Lޱ ;+7-3,/)+ɻ'*#/|&^=# H H쥕4#L8셑ȱ셒Li Lhh͊ :,6)2(.+*-&;" */|^& =#8``HHHJ eeffff㥨hhh`HHH&&&8呪咐樈㥨hhh` ȹ  a)ߝ `LLLL L8`Ӄ&͊`8`U͊b͊l͊~͊͊hhhhLЅv vȹv , 8`0:a{)AG`8`A[ a{)8``ȹ ,ڐ ȹ ,ڐȹ ' # SILLEGAL IMMEDIATE HEX DATAhhL8`ȹ # SILLEGAL IMMEDIATE ASCII DATALLխDLL 8` ݐ ` 1  8`hh SCOMMENT NOT ALLOWED HERELLٹ ,ڐ'ȹ ,ڰ SNOT ENOUGH DIGITS.hhL   SILLEGAL HEX DIGIT.hhL8` SILLEGAL OPERAND / INSTRUCTION TYPEhhLй'" SILLEGAL STRING, (ȹ f(`L`8``L f֐,ȹL,ع'" f֐ȹ,пL? LOع hh SMISSING OPERANDL# fֹL/ fL'" L fֹ,ȹL 0 ȹLhh SEXTRA STUFF IN OPERAND FIELDL8`Cȹ';ȩyLr"ȹ $ȹ"ȩyLr;y L`8`yȹ Jڙ ܐ SLABEL TOO LONG`+- fְ`*/&|^=#), ;`8`  08 ِ7ݰ3 f`  8` f `8` fְ`,)`Lȹ)X$Y+hh SONLY "X" OR "Y" ALLOWEDLЙLՙLթy* ȩyLr$yȹ ,ڰLr`><ȹ LAȹLr!-Ȣyȹ Lr`%yȹ01Lr` JڰS'ȹ OL IN OPERAND FIELDLЩ fְ`L fְ`){,%hh SMISSING ",X)", "),Y", OR ")"Lȹ)X!hh SONLY "(,X)" ALLOWEDLЙȹ)hh SMISSING ")"LЩLȹ , `8`ȹ)Yhh SONLY (),Y ALLOWEDLЙȹ ԩ ȹRrLӭɾ.ȹ ,ڰ"hh SILLEGAL SWEET-16 REGISTERLLȩ ,ڰL"ȹ,` fֈLչ ;Lԩ8` fְ`Lչ#L/L(L# L` JڐL*L$L'L"L!L%L<>Lhh SILLEGAL SYMB  L+ӥxt8`xrirsLҤt` uɖLɲLɿL԰LذLjLL&'# `L׹ !;hh SOPERAND NOT ALLOWEDLЩ8`R)r%@)hh SILLEGAL SWEET-16 OPERANDLЩLFORWARD REFERENCE.L |EQU W/O LABELLLLLLLLLLLLL6L2 L L |UNMATCHED IF/EL/FI` |NESTED IF'S NOT ALLOWEDL L $p |UNDEF SYMBOLL陋 o oL ɾ* oLLԐذȱ o o oLLȱ 5 oLKL oL  LL\ L $PQL& $P5eeeeL5 $P L |ILLEGAL ;*^  :L iLt1  ȥL |DUPLICATE LABELL L陵 L :a^& |LOCAL LABELS MAY NOT BE EQUATEDL $P L |UNDEF. SYMBOL/ILLEGAL ADDRESSL陵 ɖ +HH hehe `-HH 8h呅h咅 ` i; |SYMBOL WAS NOT PREVIOUSLY DEFINED IN AN EPZ STATEMENT.`LȢ L|H ᅒh`ȩ1 0&&L8&&L`L8eȱL 褓 BLOAD "'  ,A$ >fm`@>fm`$RA[L6!3%7 L |ILLEGAL OPERAND IN ADDRESS FIELD` yL Lȱ 5A8) ILɻ |VALUE > $FF` L LL\ LL0 : AG`8`&&&&`#Z[ 쥐`  y BLOAD TEMP. @ Lm L y]  BSAVE TEMP.,A$ ,L$HH hh8` i`LЭLЭ'( o 1 o 2 L 쭀 Э` **END OF PASS `@ `󅯩L8e |MISSING 'END'LȱL!;*à L! &eheh`I0  eI0`HHH hhh`HHHLhhh`Yh" $pLTҥLҥ ALLL|LL뭀 ` 2H7 hLh ɰ, fhh` d' { 0`:0`` G [ i LQ ``HHH  fL~) B 2 4 " fƩ/ f b L| Lꥇ fL L fL bhhh`H&H&( )? (`@#05餆`޼άݍ``L麥` G [ iLQ f L` G [ i LQ`Hȱh` G [ i LQ G JLQHH8M ACUM  ADDR  IMMD  INDJ  INDX  INDY  IDXX  IDXY ;: ;: IDXY 0D1 IXY5 #$CE IXY6 IXY1 ;: LwLuLgL,LBL LrLLfLKLLL[Li鄅H ɓ)I(Lɛ  L H(h)h` IAIA `$N 2.5D -- 64K L/B@fm BLOAD ,A$ ZL BAD FILENAME ` LHH 8 hhL8@> BSAVE ,A$ Z ,L$ ` 88 1 1 L L!;: ACCh aɻ e 1`8 a L;fj a Ld ة-Vʩ/V X LAZER SYSTEM'S INTERACTIVE SYMBOLIC ASSEMBLER (C) 1981 LAZER SYSTEMS VERSIODREQUORGOBJEPZSTRDCMASCICLENDLSTNLSHEXBYTHBYPAUDFSDCIPAGINVBLKDBYTTLSBCLET.IF.EL.FI= PHSDPH.DAGENNOGUSRLȱ0M*;L00 H :hL : Lh:L a aL )H hemmH BCCBCSBPLBNEBEQBVSBVCBSBBNMBM1BNZBIZBIMBIPBICBNCBRABTRBFLBRKBKSCLVCLCCLDCLIDEXDEYINXINYNOPPHAPLAPHPPLPRTSRTIRSBRTNSECSEISEDTAXTAYTSXTXATXSTYAADDCPRDCRINRSUBLDDPOPPPDSTDSTPLDRSTOSETADCANDORABITCMPCPXCPYDECEORINCJMPJSRLDALDXLDYSTASTXSTYXORLSRRORROLASLA  `iiL9L9 ,ɠ,ɃL/ H k s`` `H h` h , ` s  8  `ei 8  `H hH zh ]`BGEBLTBMILLLQLLLLݩ멀vم􅢅򅡠 Lp ۠8e륙ȱ0 ;*Ӡ ؐLɲ LwLɖL8閪 L[ XʈHh(`@ 8x8逪a $p UNDEFIN     Yl  . $ ; &?1?=A>?I i`HH11`쩻듧ƙɾ5Ö+]̵h5`4ɺл1>@@A`41`>BD`8>6>) `LL u ?l:L4 uLCL@ 'A=?<) < `JJJ>Ie=?<=`K i! Ȉ2 ,`H h*:` `: V:8 J8L Lӭpd`HVTQ PS 6" (!#%L" PJ TuVTvP` P&Q&R&S8RTSURSP`/T P 8/`HJ) )h)i( ((`ɇ@ 0`$($$!fi#bZH&bTDThDt(ntJrtttrDh2"&&rr&HDD h,h-<:B/ Y`EL\lY@5)I:< ?L<EhH 0l( Lh:h; LehHh:h;/ V; THH::;:-H,H E@A  J 0,*i H/.  `0 .: VȘ L `8/;e:` T0 "T3  T3  T; "D3 D"D3 D"D3 "D3 &1!YMJؤ#]#)i#$S#$S[[i$$)|mi)S4*J G(i.&E0%.Q&&` , iH h-`/'-'0 (`HJ) 'h)i& &&`0i)0 00`J G&(JJJJ)`:; H:J jɢ )Jb y.)/) JJJ Ȉ` H:  J/Ȑh,--&hEhEL=,HH hőhŒhLhL#LHH hőhŒ i`L,L ` **ERROR AT LINE :  C)ONTINUE OR A)BORT? )AL`L`;" ) ILHh+HH hehe `-HH 8h呅h咅 `*$HH hh Э `/$HH hh Э `|HH hhL&HH h%h%ĩL^HH !I%L'L"L = |** DAMAGE ** ILLEGAL CHARACTER IN OPERAND`ȱ-L[ y怒 8呅咅L 勒LȱꅑȱLȱ L8ȱLH i h`hLȱ 5A8L𤓈 |STY ABS,X NOT ALLOWEDLL7F 2LL7񤓈 |ABS,Y IS NOT ALLOWED.LL7 L7L o o,Lȱ'" o,L Lȱꅝȱŝȱŝ oL`$L< >A[L*L ` L8eȱ`% $pL񥙅LeeLJȱ ?,ȱ# o Lu/ o Lu'" Lu o o LuLLL )LȱLLL5 #LL,L1LCLL,0 ؠʆ ȄL $ 00 )ȱȱP 8e J)ȹ LwL iP P #  7 b (             ɻ Lݩ: ɻ L ީ: ɮ L ɍ 詍 h`HHH$) %&$) hhh` hhhhhh` `LLޅȹLr!-Ȣyȹ Lr`%yȹ01Lr` @ 嵐 SYM TABLE FULLLȥȩ`H phi쥵퐯8ƵȱȥȥL,ݠ쥕i Lz`HH pݥ ȥȩhh` `H LISA 2.5 I Ģ L۩ ` t`HH0;*  hh` 륒 ॑LYܥHH  hh`0 : AG`8`쥕^:&#L, DUPLICATE LABELL,i LܠŴLބ暤梤`ꅝȱŝȱŝ`ꅝȱŝȱŝ" % LA`,0`ɠ,Ƀ,L,`櫥 ݩ`` ` 1ܠ} Ģ 섘 ti9Ģ3 1ܹ` $P L[L L[_ȱ"' <۱, L[# $P LM/ $P LM $P ڥ LM  L[ L[  ) L[ 1ܩ t ***** END OF ASSEMBLY ` 륙ƚƙ`hhh Lp6  LET W/O LABELL[Р ڠȥ L[C.L ۥL[ UNMATCHED IF/EL/FIL[ ٥ݩL[Х NESTED IF'S NOT ALLOWEDL L[ $p L ۥ `8eH hȱL[+ȱꅝȱŝ L L[8ȱ * &ɻ"A) ȱA) L6 L[, FLOATING POINT NOT YET IMPLIMENTEDL[  L[ L[2مvu  ȱꅝȱŝ Lة L[HHH $pLҥ, ڄƻƺL eeee L[ $pLҥ L[ L[ȥ쥚  Lȩ < L[4ȩ <ۤIƜƛI L[? < L[?@ < " $pLҥ ڥ ڱ, L[ $pLҥ ڱ, L[:ȱ"' <۱, $pLҥ ڱ, L[  L[ L[ PAUSE ENCOUNTEREDL[" $pLҥ L[_ $pLұ,- Lq1QQ $pLTҥLҥ L[h L $pLҥ ڥ L[ LEH $phLҥ'h8鿪 LPm- ,MMNn.h8鿪 ڥ L[e%$EEFf&" $pLҥ ڥ ڱ, L[ȱ#/, $pLҥ L[ $pLҥ L[' ȱ L["ȱ L[0 ȱ A)ȱ ܰLA) L[i) IIl h $pLҥ ڥ L[h8鿪 La!AAh8鿪 UNDEFINED SYMBOLL[Х ڥ L[y9YYh" $pLTҥLҥ L[8H ڥ9$phLh ڥ ڥ L[}=]]^~>$phLTh ڥ L[u5UUVv6h8Ԫ L[Jj* h8鿪 ڥ L[Р`pHȱ +҅+҅l;Ӯ<;h>Lҩ $pA UNDEFINED SYMBOL-MUST BE ZPAGE.L[Є $PȥK ڥ7 ADDRESSING MODE REQUIRES ZPAGE VARIABLE.L[Х L[Ф8鿪# $p" ED SYMBOLL[8噅嚅ƚƙ&( BRANCH OUT OF RANGEL[Х0 L[а0pP ɼ+8鲪Hȱ@ȱA8)h L[ɾ.ɽȱ@ HLѩ@HLȱ@0HLȩPHLȱA8)  $pLҥ SE wM t٠=|󠱳Ԣ󮍢Ԣ䮍%w t tENTER MP TEXTFILE NAME:w tBLOAD wM t tENTER DESIRED LISA FILENAME:w tOPEN wM tkINSw t0Dlg*XN@<YdD|k(tWRITE wM t|XtNOMON O,I,C w t٠=T>** MICROPRODUCTS TO LISA CONVERSION**PZ $wEQU $w$@R < >= > <= ORANDNOTSHLSHRINCDECCPYICHOCHINMONMIHXOHXIFPOFi0i6  ` ȱ & -       i0 F `0`AND ARRAY BEGIN CALL CASE CONST DIV DO DOWNTO ELSE END FILE FOR FUNC IF INTEGER MEM &402ee&#0!e0 5 L,  OL  L ` >L  ? L t L  ` Lu{vC ʊ ei(i ei(i 8 ` &&  F ȥ8 ȥ L ` p) L ɔə݅ )`rb 5 0/G+:/A7&& ,  OLbL  5 - = 0>::/&8ʐ eȱeP + ` )?% L` D L ȱ  I E` + & + ee + إȥ L ` IF +  &&&8ȑ` Piȑ`ʰ ) L &ȥ`FJ( J' ȥ H %%`)ȑ` F2L F(L {  {  { 0  { 0 L i` ? iȑ` ?  &8ȥ` <ȑ`=  `  `ȱL 8ȥ0` {  X Xȑ` { ]_0 \]֥ ^_ʥ T8IIi𵐳`8e8 L ȥ`JJJJ  ) +ȱ &8`&8`` ? L ȱL ? &8L ? L ȥ` ? P P P P /wm W W W W P P P P P P P P P  P P P L ) ȱ 86iiȥȥȥȥ` Lee8ȱȱȱ`&8LN ************* ; ; GETLN $FD6F SW16  ; ; ; ; ********************* ; * * ; * PRTLN:PRINT LINE. * ; * A SWEET-16 SUB- * ; * ROUTINE WHICH WILL* ; * PRINT THE LINE * ; * POINTED AT BY R3. * ; * 00 P300 ;: IXY3 SADR OUTC PRLN P300 ;: IXY1 0BF  INXT,X OUTC  GADR AFND IXY4 USYM 00 OUTC OUTC PRLN ERRR  'UNDEFINED SYMBOL'  00 P300 ;: IXY4 SADR OUTC SADR+$01 OUTC PR0 OUTC PRLN ERRR  'UNDEFINED SYMBOL-'  'MUST BE ZPAGE.'  00 P300 ;: IXY6 #$B6 OUTC  GADR AFND USMZ ; IXY2 EYET IXY3 ;: NOTZ 00 OUTC PRLN ERRR  'ADDRESSING MODE REQU'  'IRES ZPAGE VARIABLE.'   ACCM,X LPTR  ACCM,X LPTR+$01 (LPTR) ;: ACCM ACUM  ADDR  IMMD  INDJ  INDX  INDY  IDXX  IDXY ;: ;: IDXY 0D1 IXY5 #$CE IXY6 IXY1 ;: IXY5 96 OUTC  GADR AFND IXY2 ;: USMZ 0H$xAFND SW25 USYM ;: SW25 SADR OUTC SADR+$01 OUTC PRLN P300 ;: SWOP A0D0F0E0B06080C07090 ;: ;: ";: CODES=ADD,CPR,DCR,INR,LDD,POP, ;: PPD,STD,STP,SUB. ;: ;: NORM 0F0 NRM1 0BF ;: NRM1  (PNTR),Y n" #:I$$#x&#`n"#x=#`n"#x(T#!)t ##x}#[ t #!] t #n"#x#!@n"#:I$$|)!P*XPXIPXIPXIPXIPXIL$P!x*#@n"H$x#@n"$̷bx"cn" #x5"_|dDcn" #xA"x"n"̷bXZ"DNcXy"_|dDcn""`(Y" I$! @`,Y" NcY"~I$)t #_|dDcn" Tn" #x#[ t #!] t #_|dDc$ ,Y DXD N# TTx5! @@#!$XJ! D TD#)t #;t #|^!) x!& X}!I$!̷"X!# !2I$!x!!x!  !2I$$|!(@=@M=|%$M$#!*`x #& X!hI # x @|$$| *x6  ^ # $ E \ @^  XH\ @A D _> F@|t ( Y I$| *X ^$ ;X X DN# T# N#Z! (Y I$ @ X ^$ II$$$YW=\$G@=X9G@M=@ @ |,+^* @ Ex  @  ^ t$ ܷ"x  # x |$ #@ x ܷ" @|$ xx |$ x Yx \x "_x .^x :]xFIxRHx^UxjLxvMxPxQxxI$$xpxpxtxqxuxrxvxw$ H LIx2XT\H \H/ @@xGHXDx`XZ]xXs>^I$@x@x|xTx@xDxExFxJxGxXXA_F]HI,L&e$@@X8%D$|I(tt|n)x|xдXT\H \HD@@XM0@^^II$H LIx̰xܰxx^^II$Dx>.=X&+Dx=?Dx'y 'Ys  @ RDx{}XDx(*X*Y)X (Dx%;䍱䮍Ҡ쬠堨ӠԠٍ͠ڭ00A1602020200 ; "s"  001E010E100E00 ; "t"  041F0404040800 ; "u"  00121212121C00 ; "v"  0011110A0A0400 ; "w"  00111111150A00 ; "x"  00110A040A1100 ; "y"  001111111E101E ; "z"  001F0804021F00 ; "{"  0C02020102020C ; "|" 0101010F111100 ; "i"  04000404040E00 ; "j"  08000808080A04 ; "k"  00090503050900 ; "l"  06040404040E00 ; "m"  000A1515151500 ; "n"  000D1311111100 ; "o"  000C1212120C00 ; "p"  000F11110F0101 ; "q"  000E09090E0818 ; "r"  0 040E1504040404 ; "_"  0000000000001F ; "`"  01020400000000 ; "a"  000E080E091E00 ; "b"  0202020E120F00 ; "c"  00001E01011E00 ; "d"  0808080E091E00 ; "e"  000E110F010E00 ; "f"  0412020F020200 ; "g"  000E11111E100E ; "h"   1F040404040400 ; "U"  11111111110E00 ; "V"  111111111A0400 ; "W"  111111151B1100 ; "X"  110A040A111100 ; "Y"  11110A04040400 ; "Z"  1F080402011F00 ; "["  07010101010107 ; "\"  01010204081010 ; "]"  1C10101010101C ; "^" 1F00 ; "J"  10101010110E00 ; "K"  11090705091100 ; "L"  01010101011F00 ; "M  111B1511111100 ; "N"  11131519111100 ; "O"  0E111111110E00 ; "P"  0F11110F010100 ; "Q"  0E111115091600 ; "R"  0F11110F091100  1F011F10101F00 ; "T" 100C040004 ; "@"  0E111D0D05011E ; "A"  040A111F111100 ; "B  0F110F11110F00 ; "C"  0E110101110E00 ; "D"  0F111111110F00 ; "E"  1F010701011F00 ; "F"  1F010701010100 ; "G"  0F11011D111E00 ; "H"  11111F1F111100 ; "I"  1F04040404 1F010F10100F00 ; "6"  0E01010F110E00 ; "7"  1F100804020100 ; "8"  0E110E11110E00 ; "9"  1E111E10100E00 ; ":"  00060600060600 ; ";"  00060600060402 ; "<"  08040201020408 ; "="  00001F001F0000 ; ">"  02040810080402 ; "?"  0E11+"  0004041F040400 ; ","  00000000060402 ; "-"  0000001F000000 ; "."  00000000000606 ; "/"  10100804020101 ; "0"  040A11110A0400 ; "1"  04060404040E00 ; "2"  0E11100C061F00 ; "3"  0E11100C110E00 ; "4"  0109091F080800 ; "5" 0 ; "!"  04040404040004 ; """  0A0A0A00000000 ; "#"  0A0A1F0A1F0A0A ; "$"  041E050E140F04 ; "%"  00130B041A1900 ; "&"  02050502150F16 ; "'"  04040400000000 ; "("  04020101010204 ; ")"  04081010100804 ; "*"  04150E040E1504 ; " * "; ****************************** ; ;  $1000 PLOT ERASE BASCAL DRAWLN SHAPE RADAR CLRPG1 HRGON PIX ORPIX ANDPIX XORPIX ERSLN SYMBOL DXYEQ XYEQ ; ; CHRTBL :  0000000000000 * "; * * "; * AUTHOR: RANDY HYDE * "; * APPLE II COMPUTER * "; * JULY 1979 * "; * * "; * NOTE: THIS TEXTFILE CHAINS * "; * IN THE FILE "HIRES.2"* "; * 0 ; ; "; ****************************** "; * * "; * RANDY'S HIRES ROUTINES * "; * * "; * (C) 1979 BY: * "; * LAZER SYSTEMS * "; * ALL RIGHTS RELEASED.                 R3 !R1TEST TO SEE IF AT BEGINNING UP1 ; ; R3MOVE PAST RETURN ; ; NOW LOOK FOR THE NEXT RETURN ; WHICH OCCURS EARLIER IN THE ; FILE ; UP2 :  @R3 R4 UP3 R3 R1 UP1 UP2 UP3 : R3 ; ; UP1 : PRTL PRTLN1 ; PRTLN2: R7 PRTCHR  ; ; ; ; ********************* ; * * ; * UP: MOVES THE LINE* ; * POINTER UP ON LINE* ; * * ; ********************* ; ; UP : SW16  R4,$8DINIT R4 WITH RETURN * ; ********************* ; ; PRTLN : R7,$8D ; !; MOVE CURRENT LINE POINTER (R3) ; TO REGISTER 6 ; R3 R6 ; ; NOW OUTPUT TEXT INDIRECT THRU ; REGISTER 6 UNTIL A RETURN IS ; ENCOUNTERED. ; PRTLN1:  @R6 R7 PRTLN2 PRTCHR PLT2 #$FF 7F (BASE),Y RDR1 ; !; CHECK ALL THE BYTES IN BETWEEN ; FOR DOTS. ; DISP  RDR2 : (BASE),Y RDR1  RANGE RDR2 ; YAXIS YAXIS #$FF RDR1 LENGTH RDR3 NO RADARX ; RDR1 : YES ; RADAR),Y WIDTH  (PNTR),Y LENGTH LENGTH ; ; ; NUMBYT ; ; CHECK FIRST BYTE FOR DOTS. ; RDR3 : BASCAL DISP TMPLT1 #$FF 7F (BASE),Y RDR1 ; ; CHECK LAST BYTE FOR DOTS. ;  NBYTS DISP   RANGE TM; ERED. ; !; STARTING POSITION IS SPECIFIED ; IN (XAXIS,YAXIS). THESE TWO !; VALUES ARE RESTORED UPON EXIT. ; ; RADAR : SAVREG SAVAXS ;  PNTR  PNTR+$1 ;  PNTR 03 RTNADR PNTR+$1 00 RTNADR+$1 ; 01 (PNTHE JSR. ; ; CALLING SEQUENCE: ; ; JSR RADAR ; HEX width ; HEX height ; ; AFTER THE SUBROUTINE RETURNS ; THE OVERFLOW FLAG WILL BE SET ; IF ANY DOTS WERE ENCOUNTERED, ; THE OVERFLOW FLAG WILL BE !; CLEAR IF NO DOTS WERE ENCOUNT- BYT1 : ; ; DETERMINE "TEMPLATE" FOR THE ; LAST BYTE. ;  NMSK2,X TMPLT2 ;     ; ; NMSK1 000103070F1F3F7F NMSK2 FFFEFCF8F0E0C080 ; ; ; "; RADAR - DETERMINES IF THERE ARE "; ANY BITS IN THE RANGE SPECIFIED ; AFTER TR THE ; FIRST BYTE ;   NMSK1,X TMPLT1  ; ; CALCULATE # OF BITS FROM 1ST ; BYTE. ;  WIDTH ;  XDIV7,X NBYTS ; ; ; IF ANY BITS OVERFLOW PAST THE !; LAST BYTE INCREMENT THE WIDTH. ; XMOD7,X NBYT1 ; NBYTS ; N 0507 CHARS 0000000000000000 ; ; ; ; COMPUTE # OF BYTES NEEDED ; FOR CURRENT WIDTH ; NUMBYT :    ; BASCAL ; ; ; CALCULATE "BITSET" - IN LINE ; CODE FOR BN2BS. ; BITNUM BITCNV,X  01 ; ; DETERMINE "TEMPLATE" FO; IF AT BOTTOM, TOUGH LUCK! ; SLOOP2 SLOOP SLOOP2 : ; $; IF NOT A BOTTOM, DECREMENT YAXIS. ;  YAXIS 08 YAXIS SLOOP ; ; SYMXIT : INCR SAVA SAVY SAVX (RTN) ; SAVA 00 SAVY 00 SAVX 00 ; CHAR ;  XAXIS 06 XAXIS SYMBL2 ; XAXIS+$1 SYMBL2 : ; &; PROVIDE "WRAP-AROUND" IF NECESSARY. ; XAXIS 11 XAXIS+$1 01 SLOOP3 SLOOP SLOOP3 : ; ; TO MANY COLUMNS HERE. ; 00 XAXIS XAXIS+$1 ; YAXIS 08 ;  00 SYMBL4 : 00 (PNTR),Y INCP 07 ; SYMBL5 :  CHARS,X  SYMBL5 ;  07 SYMBL4 ; 05 WIDTH 07 LENGTH RTN  RTN+$1  ORPIX  CHAR  RTN+$1  RTN ; $; MOVE OVER TO NEXT PRINT POSITION. PNTR+$1   PNTR PNTR  PNTR+$1 PNTR+$1   PNTR PNTR SYMBL1 ; PNTR+$1 SYMBL1 : ; #; CONVERT DISPLACEMENT TO ADDRESS. ;  #CHRTBL PNTR PNTR /CHRTBL PNTR+$1 PNTR+$1 ; ; FIX UP TYPO IN CHRTBL ;0 INCR (RTN),Y SLOOP1 SYMXIT SLOOP1 : ; ; CONVERT TO STRAIGHT ASCII ; 7F ; #; FORM A DISPLACEMENT INTO CHRTBL. ;  20 ; ; MULTIPLY TIMES 7 ; PNTR PNTR+$1 PNTR  PNTR PNTR+$1 PNTR+$1  PNTR  PNTR 0010203040506 ; ; ; OUTPUT CHARACTERS TO THE ; SCREEN ; ; EXAMPLE ; ; JSR SYMBOL ; ASC "HELLO THERE" ; HEX 00 ; ; PRINTS "HELLO THERE" AT XAXIS ; YAXIS. ; SYMBOL : SAVA SAVY SAVX ;  RTN  RTN+$1 ; SLOOP : 0 00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  0506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506 04040400040404 ; "}"  06080810080806 ; "~"  0000100A050000 ; ""  0000000E0E0E00 ; ; ; ; XMOD7 :  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040506  00010203040 ; INCR : RTN INCR1 RTN+$1 INCR1 :  ; ; ; INCP - INCREMENTS PNTR ; ; INCP : PNTR INCP1 PNTR+$1 INCP1 :  ; ; ; ; XY= : ASSIGNS VALUE FOLLOWING !; THE JSR TO (XAXIS,YAXIS) ; !; DXY=: ASSIGNS VALUES FOLLOP5 BYTCNT SHP2 SHIFTR (RTN),Y INCR SHP1 ; ; SHP5 : BYTCNT SHP8  SHIFTR SHP5 ; ; SHP8 : SHIFTR (RTN),Y INCR LENGTH SHP6 SHP0 ; SHP6 : RSTREG (RTNADR) ; ; ; ; INCR - INCREMENTS RTNWIDTH 00 (RTN),Y INCR LENGTH (RTN),Y INCR ; SHP0 : WIDTH SHP1 : 08 BYTCNT 00 SHIFTR ; SHP2 : (PNTR),Y INCP 7F 20 SHP3 ;  SHIFTR SHP4 ; SHP3 :  SHIFTR ; SHP4 :  SHTHE H.O. BIT OF THESE CHARACTERS "; MAY BE SET OR RESET, IT DOESN'T ; MATTER. ; SHAPE : SAVREG GETADR INCP ; 00 (RTNADR),Y RTN  (RTNADR),Y RTN+$1 ;  RTNADR 02 RTNADR RTNADR+$1 00 RTNADR+$1 ; 00 ASC "* *" ; ASC "***" ;BLKADR HEX 0000000000 ; ; ; NOW, JSR PIX ; ADR BLKADR ; ; WILL DRAW: ; ; ... ; . . ; ... ; ; ; NOTE: ANY CHARACTER EXCEPT ; BLANK WILL FORCE THE BIT ON ; BLANK WILL FORCE THE BIT OFF. ; #; HAPE ; TABLE WHICH IS TO BE CREATED. ; ; YOU SHOULD RESERVE AT LEAST ; ([WIDTH/7] + 1) * LENGTH + 2 ; BYTES FOR THE SHAPE TABLE. ; ; EXAMPLE: ; ; JSR SHAPE ; ADR BLOCK ; ADR BLKADR ; ; BLOCK HEX 0303 ; ASC "***" ; I CHARACTERS. ; ; CALLING SEQUENCE: ; ; JSR SHAPE ; ADR SHPCHR ; ADR SHPADR ; ; WHERE "SHPCHR" IS A STRING OF ; ASCII CHARACTERS WHOSE FIRST ; TWO BYTES GIVE THE WIDTH THE ; HEIGTH OF THE SHAPE. "SHPADR" ; IS THE ADDRESS OF THE S ;  XAXIS XINC XAXIS XAXIS+$1 XINC+$1 XAXIS+$1 ; ; DFRY2 :  YAXIS YINC YAXIS ; PLOT ; I DFRY3 I+$1 DFRY3 I ; I I+$1 DFRY1 ;  ; ; ; ; SHAPE - CREATES A SHAPE FROM ; USER INPUT ASCII+$1  ERROR+$1 DELTAY I  ERROR ; DFRY1 :  ERROR DELTAX ERROR ERROR+$1 DELTAX+$1 ERROR+$1 ; ERROR DELTAY ERROR+$1 DELTAY+$1 DFRY2 ; ERROR DELTAY ERROR ERROR+$1 DELTAY+$1 ERROR+$1C+$1 XAXIS+$1 ; COLOR DFRX6 ; ; ERASE A DOT HERE ; ERASE DFRX7 ; ; PLOT A POINT HERE. ; DFRX6 : PLOT ; ; DFRX7 : I DFRX4 I+$1 DFRX4 : I I I+$1 DFRX2 DFRX5 :  ; ; ; DOFORY : DELTAY+$1 OR ERROR+$1 DELTAY+$1 ERROR+$1 ; ERROR DELTAX ERROR+$1 DELTAX+$1 DFRX3 ; ERROR DELTAX ERROR ERROR+$1 DELTAX+$1 ERROR+$1  YAXIS YINC YAXIS ; DFRX3 :  XAXIS XINC XAXIS XAXIS+$1 XINWLN6 ; ; DRWLN5 : DOFORX ; ; DRWLN6 : RSTAXS RSTREG  ; ; ; DOFORX : DELTAX DFRX1 DELTAX+$1 DFRX5 ; DFRX1 : DELTAX+$1 I+$1  ERROR+$1 DELTAX I  ERROR ; DFRX2 :  ERROR DELTAY ERRLTAY+$1 DRWLN3 #$FF YINC YINC+$1  00 DELTAY DELTAY 00 DELTAY+$1 DELTAY+$1 DRWLN4 ; ; DRWLN3 : 01 YINC 00 YINC+$1 ; ; DRWLN4 : DELTAX DELTAY DELTAX+$1 DELTAY+$1 DRWLN5 ; DOFORY DR DESTY YAXIS DELTAY 00 00 DELTAY+$1 ; ; DELTAX+$1 DRWLN1 ; #$FF XINC XINC+$1  00 DELTAX DELTAX 00 DELTAX+$1 DELTAX+$1 DRWLN2 ; ; DRWLN1 : 01 XINC 00 XINC+$1 ; ; DRWLN2 : DER DRWLNE ; ; ; ERSLN - ERASES A LINE INSTEAD ; OF DRAWING IT. ; ERSLN : SAVREG SAVAXS #$FF COLOR ; ; DRWLNE : ; ; COMPUTE DELTAX ;  DESTX XAXIS DELTAX DESTX+$1 XAXIS+$1 DELTAX+$1 ; ; COMPUTE DELTAY ; RX : RSTAXS RSTREG (RTNADR) ; ; YES 40 NO 00 ; ; ; ; DRAWLN - DRAWS A LINE FROM !; (XAXIS,YAXIS) TO (DESTX,DESTY) ; ; AFTER RETURN, ALL AXIS ARE ; RESTORED TO ORIGINAL VALUE. ; DRAWLN : SAVREG SAVAXS 00 COLO292929 ; ; BITCNV 0001020003 0000000400 0000000000 0005000000 0000000000 0000000000 0000060000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000700 ; !; BASCAL- HIRES BASE CALCULATION ; ROUTINE. ; !1C1C  1D1D1D1D1D1D1D  1E1E1E1E1E1E1E  1F1F1F1F1F1F1F ;  20202020202020  21212121212121  22222222222222  23232323232323  24242424242424 ; XDV72 242424  25252525252525  26262626262626  27272727272727  28282828282828  29292929E0E0E  0F0F0F0F0F0F0F ;  10101010101010  11111111111111  12121212121212  13131313131313  14141414141414  15151515151515  16161616161616  17171717171717  18181818181818  19191919191919  1A1A1A1A1A1A1A  1B1B1B1B1B1B1B  1C1C1C1C1C000000000  01010101010101  02020202020202  03030303030303  04040404040404  05050505050505  06060606060606  07070707070707  08080808080808  09090909090909  0A0A0A0A0A0A0A  0B0B0B0B0B0B0B  0C0C0C0C0C0C0C  0D0D0D0D0D0D0D  0E0E0E0E0 01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040 01020408 ; XCORD2 102040  01020408102040  01020408102040  01020408102040  01020408102040 ; ; ; XDIV7 000000  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040 COORD 01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  01020408102040  0102040810204+$1 TMPLT1 RANGE+$1 TMPLT2 TMPLT1+$1 NBYTS TMPLT2+$1 DELTAX NBYTS+$1 DELTAY DELTAX+$2 I DELTAY+$2 XINC I+$2 YINC XINC+$2 ERROR YINC+$2 DESTX ERROR+$2 DESTY DESTX+$2 RTN DESTY+$2 ; ; ; ; XBITCNT DATA+$2 TEMPW BITCNT+$1 TEMPX TEMPW+$1 SHIFTR TEMPX+$1 PNTR SHIFTR+$1 BYTCNT PNTR+$2 LENGTH BYTCNT+$1 RTNADR LENGTH+$1 ASV1 RTNADR+$2 YSV1 ASV1+$1 XSV1 YSV1+$1 BITSET XSV1+$1 RANGE BITSET<* YAXIS $80 XAXIS YAXIS+$1 BASE XAXIS+$2 DISP BASE+$2 BITNUM DISP+$1 FROM BITNUM+$1 TO FROM+$2 AT TO+$2 COLOR AT+$2 HLEN COLOR+$1 WIDTH HLEN+$2 HEIGHT WIDTH+$1 DATA HEIGHT+$1             !!! ! ! ! ! !!!!!!!!!" RETURN. ; (PNTR),Y DESTX INCP (PNTR),Y DESTX+$1 INCP (PNTR),Y DESTY INCP ; XYASV XYYSV (PNTR) ; XYASV 00 XYYSV 00 FLAG 00 ; "HIRES.2" PNTR),Y XAXIS+$1 INCP (PNTR),Y YAXIS INCP ; ; TEST FLAG TO SEE IF ROUTINE #; IS SUPPOSED TO GET (DESTX,DESTY) ; FLAG XYEQ2 ; ; NO - RETURN HERE ; XYYSV XYASV (PNTR) ; ; XYEQ2 : ; ; GET (DESTX,DESTY) HERE, THEN ;; #FALSE FLAG XYEQ1 ; ; ; DXYEQ : XYASV #TRUE FLAG ; ; XYEQ1 : XYYSV ; ; GET ADDRESS OF DATA OFF OF ; THE STACK. ;  PNTR  PNTR+$1 ; INCP 00 ; ; GET (XAXIS,YAXIS) ; (PNTR),Y XAXIS INCP (EX 70 ; ; STORES $100 IN XAXIS, $80 IN ; YAXIS, $110 IN DESTX, AND ; $70 IN DESTY. ; ; ; DECLARE BOOLEAN VALUES. ; TRUE $01 FALSE $00 ; ; ; XYEQ XYASV ; ; SET FLAG TO FALSE SIGNIFYING ; THAT DEST(X,Y) IS NOT TO BE ; LOADED. WING !; THE JSR TO (XAXIS,YAXIS) ; AND (DESTX,DESTY) ; ; EXAMPLE: ; ; JSR XY= ; ADR $80 ; HEX 45 ; ; STORES 0080 IN XAXIS & $45 IN ; YAXIS. ; ; JSR DXY= ; ADR $100 ; HEX 80 ; ADR $110 ; HE! ; PIX6 : BITNUM #$FF DISP (BASE),Y (BASE),Y ; ; MOVE DOT CURSOR RT. HERE. ; BITNUM PIX7 ; 01 BITNUM DISP DISP 28 PIX7 ; DISP 40 BITNUM ; ; ; CHECK TO SEE IF AT END OF ; CURRENT ROW, THEN REPEFTR PIX6 ; ; PLOT A POINT HERE! ; BITNUM DISP (BASE),Y (BASE),Y ; ; MOVE DOT CURSOR ONE PLACE TO ; THE RIGHT. ; BITNUM PIX7 01 BITNUM DISP DISP 28 PIX7 ; DISP 40 BITNUM PIX7 ; ; ERASE A POINT HERIX : SAVREG SAVAXS ; GETADR ; ; GET ADDRESS ON SCREEN WHERE ; PICTURE IS SUPPOSED TO GO. ; PIX3 : BASCAL WIDTH ; PIX4 : 08 BYTCNT PNTR PIX11 PNTR+$1 PIX11 : 00 (PNTR),Y SHIFTR ; PIX5 : SHI (PNTR),Y SHIFTR  (PNTR),Y PNTR+$1 SHIFTR PNTR ; ; ; GET WIDTH. ; 00 (PNTR),Y WIDTH PNTR PIX2 PNTR+$1 ; ; GET LENGTH. ; PIX2 : 00 (PNTR),Y LENGTH ; ; RTN+$1  RTN   ; ; ; ; ; PSTACK; ;  PNTR  PNTR+$1 ; ; INC PAST LAST BYTE OF JSR ; INSTRUCTION. ; PNTR PIX1 PNTR+$1 ; PIX1 : 00  PNTR 2 RTNADR PNTR+$1 00 RTNADR+$1 ; ; LOAD ADDRESS OF THE FIRST ; BYTE OF BITMAP INTO PNTR. ; IS CODED AS ; ; HEX 0303 (LENGTH & ; WIDTH) ; HEX E0 (1ST ROW) ; HEX E0 (2ND ROW) ; HEX E0 (3RD ROW) ; GETADR :  RTN  RTN+$1 ; ; ; GET ADDRESS OF BIT MAP OFF ; OF THE IVELY. ; IF THE NUMBER OF BITS ; IN A ROW IS NOT AN EVEN ; MULTIPLE OF 8 THE RE- ; MAINING BITS IN THE ; LAST BYTE OF THAT ROW ; ARE IGNORED. ; EXAMPLE: ; ; ... ; ... ; ... ; ; ; THE TWO BYTES FOLLOWING ; THE JSR POINT THE THE ; BIT ARRAY. ; EG; ; JSR PIX ; ADR BITMAP ; ; THE FIRST TWO BYTES OF ; THE BIT ARRAY CONTAIN ; THE WIDTH AND LENGTH ; RESPECT; ERASE - ERASES POINT AT ; (XAXIS,YAXIS) ; ERASE :    ; BASCAL ; DISP BITNUM #$FF (BASE),Y (BASE),Y ;     ; ; ; PIX - DRAWS A PICTURE ON THE ; CRT. PICTURE CONSISTS ; OF A BIT ARRAY.; CLRPG1 - CLEARS PAGE ONE OF ; HIRES GRAPHICS. ; CLRPG1   ; 00 DATA 20 DATA+$1 ; 00 00 ; CLOOP (DATA),Y DATA CLOOP DATA+$1 DATA+$1 40 CXIT 00 CLOOP ; CXIT    ; ; - TURN HIRES ON ; HRGON $C050 $C057 $C052  ; ; ; ; ; ; ; PLOT - PLOTS AN INDIVIDUAL ; POINT. ; PLOT   ; BASCAL ; DISP BITNUM (BASE),Y (BASE),Y     ; ; ; ; ; ; ; ; ; ; ; ; TS BITNUM ; TO BITSET, VALUE IS ; RETURNED IN BITSET. ; BITSET IS THE NUMBER ; OF THE PARTICULAR ; BIT WHICH IS SET. ; BN2BS :    BITNUM BITCNV,X BITSET     ; ; ; ; ; HRGONSV1 XSV1 YSV1  ; ; !; ** HERE X-C00RDINATE >= 256 ** ; ; DETERMINE BITNUM. ; BSCL2 XCORD2,X BITNUM ; ; "CALCULATE" XAXIS / 7 ; XDV72,X DISP ; ASV1 YSV1 XSV1  ; ; ; ; BN2BS - BITNUM TO BITSET ; CONVER* CALCULATE DISPLACEMENT ** ; YAXIS YLOBYT,X BASE YHIBYT,X BASE+$1 ; XAXIS XAXIS+$1 BSCL2 ; ; ** HERE X-COORDINATE <256 ** ; ; DETERMINE BITNUM ; XCOORD,X BITNUM ; ; "CALCULATE" XAXIS / 7 ; XDIV7,X DISP ; A A "1" IN THE ; BIT POSITION CORRES- ; PONDING WITH THE BIT !; TO BE SET. ALL OTHER !; BIT POSITIONS CONTAIN ; "0". ; ; !; ** CALCULATE BASE ADDRESS ** ; BASCAL : ; ASV1 YSV1 XSV1 ; ; ; *; XAXIS-CONTIANS X-COORDINATE OF ; POINT DESIRED. !; YAXIS-CONTIANS Y-COORDINATE OF ; POINT DESIRED. ; !; BASE -TWO BYTE BASE ADDRESS IS ; RETURNED HERE. !; DISP -ONE BYTE DISPLACEMENT IS ; RETURNED HERE ; !; BITNUM - CONTAINSB37332F2B2723  3F3B37332F2B2723  3E3A36322E2A2622  3E3A36322E2A2622  3D3935312D292521  3D3935312D292521  3C3834302C282420  3C3834302C282420  3F3B37332F2B2723  3F3B37332F2B2723  3E3A36322E2A2622  3E3A36322E2A2622  3D3935312D292521  8080808080808080  0000000000000000  8080808080808080  0000000000000000 ; YHIBYT 3F3B37332F2B2723  3F3B37332F2B2723  3E3A36322E2A2622  3E3A36322E2A2622  3D3935312D292521  3D3935312D292521  3C3834302C282420  3C3834302C282420  3F350505050505050  A8A8A8A8A8A8A8A8  2828282828282828  A8A8A8A8A8A8A8A8  2828282828282828  A8A8A8A8A8A8A8A8  2828282828282828  A8A8A8A8A8A8A8A8  2828282828282828  8080808080808080  0000000000000000  8080808080808080  0000000000000000  ; SAVREG : ASAVE XSAVE YSAVE  ; ; RSTREG : ASAVE XSAVE YSAVE  ; YLOBYT :  D0D0D0D0D0D0D0D0  5050505050505050  D0D0D0D0D0D0D0D0  5050505050505050  D0D0D0D0D0D0D0D0  5050505050505050  D0D0D0D0D0D0D0D0  500 : XORPX3 ; ; END OF PICTURE ; XORPXT : RSTAXS RSTREG (RTNADR) ; ; ; SAVAXS :  YAXIS YAXSV XAXIS XAXSV XAXIS+$1 XAXSV+$1   ; RSTAXS :  YAXSV YAXIS XAXSV XAXIS XAXSV+$1 XAXIS+$1  BITNUM DISP DISP 28 XORPX7 ; DISP 40 BITNUM ; XORPX7 : ;  XORPX8 BYTCNT XORPX5 XORPX4 ; ; GO TO NEW ROW HERE ; XORPX8 : LENGTH XORPXT ; XORPX9 : YAXIS YAXIS #$FF XORP10 YAXIS ; XORP1X4 : 08 BYTCNT PNTR XORP11 PNTR+$1 XORP11 : 00 (PNTR),Y SHIFTR ; XORPX5 : SHIFTR XORPX6 ; ; INVERT A POINT HERE! ; BITNUM DISP (BASE),Y (BASE),Y ; ; MOVE DOT. ; XORPX6 : BITNUM XORPX7 ; 01 ; ANDPXT : RSTAXS RSTREG (RTNADR) ; ; ; ; XORPIX - EOR'S PICTURE ONTO ; SCREEN. EACH DOT IN PICTURE ; CAUSES CORRESPONDING DOT ON ; SCREEN TO BE XOR'D. ; XORPIX : SAVREG SAVAXS GETADR ; XORPX3 : BASCAL WIDTH ; XORP 40 BITNUM ; ; ANDPX7 :  ANDPX8 BYTCNT ANDPX5 ANDPX4 ; ; ; GO TO A NEW ROW HERE ; ANDPX8 : LENGTH ANDPXT ; ANDPX9 : YAXIS YAXIS #$FF ANDP10 YAXIS ; ANDP10 : ANDPX3 ; ; ; END OF PICTURE HERE! DPX5 : SHIFTR ANDPX6 ; ; ERASE A POINT HERE! ; BITNUM #$FF DISP (BASE),Y (BASE),Y ; ANDPX6 : ; ; MOVE DOT CURSOR ONE POSITION ; TO THE RIGHT ; BITNUM ANDPX7 ; 01 BITNUM DISP DISP 28 ANDPX7 ; DISPWN ; BY ORPIX / PIX. ; ; ANDPIX : SAVREG SAVAXS ; GETADR ; ; CALCULATE PIX ADDRESS. ; ANDPX3 : BASCAL WIDTH ; ANDPX4 : 08 BYTCNT PNTR ANDP11 PNTR+$1 ; ANDP11 : ; 00 (PNTR),Y SHIFTR ; ; AN SEE IF ; PICTURE IS COMPLETE. ; ORPIX8 : LENGTH ORPXIT ; ORPIX9 : YAXIS YAXIS #$FF ORPX10 YAXIS ; ORPX10 : ORPIX3 ; ; END OF PICTURE! ; ORPXIT : RSTAXS RSTREG (RTNADR) ; ; ; ; ANDPIX - ERASES PICTURE DRACURSOR RIGHT HERE. ; ORPIX6 : BITNUM ORPIX7 ; 01 BITNUM DISP DISP 28 ORPIX7 ; DISP 40 BITNUM ; ; ORPIX7 : ; ; SEE IF AT END OF CURRENT ROW. ;  ORPIX8 BYTCNT ORPIX5 ORPIX4 ; ; GO TO NEW ROW HERE,DR ; ; ORPIX3 : BASCAL WIDTH ; ORPIX4 : 08 BYTCNT PNTR ORPX11 PNTR+$1 ORPX11 : 00 (PNTR),Y SHIFTR ; ORPIX5 : SHIFTR ORPIX6 ; ; PLOT A POINT HERE! ; BITNUM DISP (BASE),Y (BASE),Y ; ; MOVE DOT ND OF PIX HERE! ; PIXIT : RSTAXS RSTREG (RTNADR) ; ASAVE 00 YSAVE 00 XSAVE 00 XAXSV 00 XAXSVH 00 YAXSV 00 ; ; ; ORPIX- "OR'S" PICTURE ONTO ; SCREEN W/O ERASING. ; ORPIX : SAVREG SAVAXS GETAAT. ; PIX7 :  PIX8 BYTCNT PIX5 PIX4 ; ; ; GO TO A NEW ROW HERE. ; CHECK TO SEE IF PICTURE IS ; COMPLETE. ; PIX8 : LENGTH PIXIT ; ; PIX9 : YAXIS YAXIS #$FF PIX10 YAXIS ; PIX10 : PIX3 ; ; ; EN \[|o ~'] #Ӏ;fA?=+ءӀ;;DiH;R0 3Y4;`pwY i};b0 ```p,~iL% 'v0`f(s>8̃m0 *8  9A@ؐcp0!w X~H3#,βށH^tA $SYMADRS FIXREL0 SYMADRS+1 ; FIXREL0 SYMADRS STADDRS SYMADRS+1 STADDRS ; ; ABSLADR #1 (PCAUX),Y SYMADRS  (PCAUX),Y SYMADRS+1 STADDRS ; ; ; ; ; ; ; ; DISASM/65 SYMBOL TABLE ; MAINTENENCE ROUTINES ; ; ; NG HERE ; #1  (PCAUX),Y RELNEG ; PCAUX SYMADRS PCAUX+1 #0 SYMADRS+1 FIXREL ; ZPAGEADR#1 (PCAUX),Y SYMADRS #0 SYMADRS+1 STADDRS ; RELNEG PCAUX SYMADRS #$FF PCAUX+1 SYMADRS+1 ; FIXREL : R 8286924A NUMABS *-ABSADR+1 ; ; ; SETFMT :    ; FORMAT #NUMZPG ; ZPLOOP ZPGADR,Y ZPAGEADR  ZPLOOP ; #NUMABS ABSLOOP ABSADR,Y ABSLADR  ABSLOOP ; #$9DRELATIVE STFMTXIT ; ; RELATIVE ADDRESSI      ; ; ; PCADJ PCADJ2 LENGTH PCADJ3 PC+1  PCADJ4  ; PCADJ4 PC RTS2  RTS2 ; ; CHAR1 ",),#(L" CHAR2 "Y"  $0  "X$L"  $0 ; ; ZPGADR 8185914D59 NUMZPG *-ZPGADR+1 ; ABSAD PRNTAX PRBYTE PRNTX PRBYTE ; PRBLNK #3 PRBL2 #" " PRBL3 COUT  PRBL2  ; ; ; HEXOPCD :      ; #0 PRTHX3 HEX+1,X PRTHX4 COUT  PRTHX3 ; PRTHX4 : #0 (PC),Y PRBYTE ; R5 ; PRADR2 FORMAT PRADR3 CHAR1-1,X COUT CHAR2-1,X PRADR3 COUT ; PRADR3 PRADR1  ; ; PRADR4 PRADR2 PRBYTE ; PRADR5 FORMAT #$E8 (PC),Y PRADR4 ; RELADR PCADJ3   PRNTYX  ; PRNTYX #3  MNEML,Y LMNEM MNEMR,Y RMNEM ; PRMN1 #0 #5 ; PRMN2 RMNEM LMNEM   PRMN2 #0 PRMN3 HEXOPCD ; PRMN3 :  #"?" COUT  PRMN1 ; PRMN4 : PRBLNK LENGTH #6 ; PRADR1 #3 PRAD#$8F   #3 #$8A MNNDX3 ; MNNDX1 MNNDX3  ; MNNDX2 #$20  MNNDX2  ; MNNDX3 MNNDX1  ; ; ; SCRN2 RTMSKZ     RTMSKZ #$F  ; ; ; ; ; INSTDSP : ; #" " COUT INSDS1 PPLE MONITOR DISASSEMBLY ; ROUTINES. ; INSDS1 #0 (PC,X) ; INSDS2  IEVEN  ERR #$A2 ERR #$87 ; IEVEN  FMT1,X SCRN2 GETFMT ; ERR #$80 #$0 ; GETFMT FMT2,X FORMAT #3 LENGTH  E $FD6A FMT1 $F962 FMT2 $F9A6 MNEML $F9C0 MNEMR $FA00 APLMONTR $FF59 ; ; ; ; #; DOS 3.2 (3.3) INITIALIZE ROUTINE ; (ALSO $3EA) ; DISKINIT $A851 ; ; ; ; ; ; THE FOLLOWING ROUTINES ARE ; MODIFIED VERSIONS OF THE ; ASEARCH+2 ENDSRCH TMPSRCH+2 A2 ENDSRCH+2 BYTCNT A2+2 PCPLUS1 BYTCNT+2 ; ; ; ; ; MONITOR ZERO PAGE EQUATES ; PROMPT $33 ; ; ; ; ; ; ; MONITOR CALLS AND EQUATES ; ; PRYX2 $FD96 PRBYTE $FDDA COUT $FDED GTLIN1 LMNEM LENGTH+1 RMNEM LMNEM+1 SYMADRS RMNEM+1 TEMP SYMADRS+2 PCAUX TEMP+2 BGNRANGE PCAUX+2 ENDRANGE BGNRANGE+2 STOPVAL ENDRANGE+2 MODE STOPVAL+2 STARTLOC MODE+2 STOPPOSN STARTLOC+2 SEARCH STOPPOSN+2 TMPSRCH %  $6800  $800 " "LISA DISASSEMBLER VERSION 1.0" START ; ; ; ; CONSTANTS USED BY DISASM/65 ; BELL $87 CR $8D CTRLD $84 ; ; ; ; "; ZERO PAGE EQUATES FOR DISASM/65 ; PC $80 FORMAT PC+2 LENGTH FORMAT+" " " " " """""""""           3D3935312D292521  3C3834302C282420  3C3834302C282420