@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H  }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LLeersektoren G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSBrauche MEM.SAV zum Laden. D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSFehler beim Abspeichern auf Disk , um DOS&} zu laden. B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu } 3E:}|ǠȠӠ Disketteninhalt Formatieren M Zum Basic *} Disk kopieren Kopie auf Ext. Save binaer Datei loeschen Load binaer Datei umbenennen Start bei Adr. +} Datei sichern MEM.SAV anlegen Datei freigeben Datei kopieren DOS anlegen Formatieren S L !N' ,}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }DOS 2.0s einlegen, , x  -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!Falsche WahlEingab .}e. zum Menue. ! 0 .z:*{}.|{ 1 0 0JB 18L%|DL /}%Inhalt-[Suchspezif.,Ausgabeger.]?[# 0 0 &|D3" 1L!Keine DiskdateiN !B 1L!E# 1 !BD 0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0. 1}  0?詛 1 y0JЛ 1 ;#L" ;#L! BL1- zum Loeschen von Loeschen- Datei? 2}Quelle, Ziel ? Nicht ausfuehrbar.737 Leersektoren Kopiere...D1:DISKFIX.COMl# 0|D .L/%# 3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY 4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!Keine 'Wild Card 6}s' im Zieldateinamen 0 <.|K}n 2 Format. t* 5) 1L!`) 0NΞ 0 L1) 1 L!Nicht ladbar.Laden- Datei? ) 0 ?}0#B 1L!Sichern - Datei? ) 0 0$B 1L!Freigeben- Datei? DUP Quell-,Ziellaufwerk? Programmspeicher ben @}utzen ? / ΛAchtung: MEM.SAV wird dann inaktiv.FE! +L1   `*  70 2 2 A} 0.* 1 y0 0)Beide Disketten einlegen, Ԯ^, 1 y038逍 N, 1L! , B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0 C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,Hh D}` Zu wenig RAM! Quelldiskette einlegen,.Zieldiskette einlegen,.  E}`  `8 rL1`-* 1P* 1 y0J`hhL!Kopieren- Datei? - 0 0|DL% <. F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#P H},^ 1 70 0L#L!-* 1P* 1 y0Jj383}mm ݭ I}}`8}``|* ? ɛ,`|:-)| / 1L!`DOS.SYS als Ziel verbo J}ten. 0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξ K}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSave-Dat.n L}ame,Start,Ende[,Init,Run]O S0 1`BDEPHI V` S0H 1 L! M}0 0 1L~0`Bitte nur 1 Zeichen.,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥ N}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{Name O} zu lang. B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 L P}!Fehler 128ɛ+,' 20*.. өr2 1``2Eingabe zu langUngueltige h Q}exadez.Parameter.800 0 8 00`,0'D800 H,ɛh`2L1D1 - D8 angebenu R} xadez.Parameter.800 0 8 00`,0'D800 H,ɛh`2L1D1 - D8 angebenu !"`ɛ`!"`?"FRACTAL EXPRESS Quelltexte" $T}!"`ɛ`!"`?"FRACTAL EXPRESS Quelltexte" $************************************** * MARIO BRANDES * PRESENTS * TEXTGRAPHIK USR(1536,XPOS,YPOS,STRING,LENGTH) * (V}************************************** SAVMSC EQU 88 CHBASE EQU 756 POS EQU 204 ZEIGER IN SCREEN XPOS EQU 1790 X-POSITION (W}YPOS EQU 1791 Y-POSITION ZEICHEN EQU 206 ZEIGER IN ZEICHENSTZ STRING EQU 208 ZEIGER IN STRING LENGTH EQU 1789 LAENGE DES TEXT(X}ES IFLAG EQU 1788 INVERTIERFLAG OUT L ORG $0600 PAGE-6 * * VORBEREITUNG(DATEN VOM STACK HOLEN) * PLA PLA PLA STA XPOS(Y} PLA PLA STA YPOS PLA STA STRING+1 PLA STA STRING PLA PLA STA LENGTH * * MAIN PROGRAM * MLOOP LDA #0 STA ZEICHEN Z(Z}EICHEN STA ZEICHEN+1 AUF NULL LDY #0 LDA (STRING),Y ZEICHEN STA ZEICHEN AUS STRING JSR CHRINV INVERT ? JSR CONVERT ASC([}->INTERN LDA XPOS CMP #40 UNGUELTIGE BCS ENDE POSITION ? LDA YPOS CMP #185 BCS ENDE JSR CALC POSITION IN JSR CHCAL(\}C SCREEN&CHAR JSR CHPUT SCHREIBEN INC STRING ZEICHEN+1 INC XPOS XPOS+1 DEC LENGTH LAENGE-1 BNE MLOOP FERTIG? ENDE RTS (]}* * BERECHNUNG DER SCREENPOSITION * CALC LDA #0 POSITION STA POS AUF NULL STA POS+1 LDX #40 LOOP1 CLC LDA POS Y-POSIT(^}ION ADC YPOS MAL 40 STA POS (40 ZEICHEN LDA POS+1 PRO ZEILE) ADC #0 STA POS+1 DEX BNE LOOP1 CLC LDA POS ADC XPO(_}S STA POS PLUS LDA POS+1 XPOSITION ADC #0 STA POS+1 CLC LDA SAVMSC PLUS ADC POS BILDANFANG STA POS LDA SAVMSC+1 A(`}DC POS+1 IST DIE STA POS+1 POSITION RTS * * BERECHNUNG DER ZEICHENPOSITION * CHCALC CLC ASL ZEICHEN ZEICHEN*8 ROL ZEICHE(a}N+1 ASL ZEICHEN ROL ZEICHEN+1 ASL ZEICHEN ROL ZEICHEN+1 LDA ZEICHEN+1 UND DANN CLC ADC CHBASE PLUS CHBASE STA ZEICHEN(b}+1 RTS * * BITMUSTER INS VIDEORAM * CHPUT LDX #8 8 BITMUSTER LDY #0 LOOP2 LDA (ZEICHEN),Y BITMUSTER EOR IFLAG ;EVTL. INV(c}ERTIEREN STA (POS),Y INS BILD CLC LDA POS ADC #40 POSITION STA POS +40 LDA POS+1 (1 ZEILE ADC #0 TIEFER) STA POS+1(d} INC ZEICHEN NAECHSTES DEX BITMUSTER BNE LOOP2 RTS * * PRUEFE OB DAS ZEICHEN INVERS IST * CHRINV LDA ZEICHEN CMP #128 (e} BIT 7 SET? BCS INVERS LDA #0 STA IFLAG NICHT RTS INVERTIEREN INVERS EOR #128 STA ZEICHEN LDA #255 STA IFLAG INVERTIE(f}REN RTS * * ATASCII-->INTERN WANDLER * CONVERT LDA ZEICHEN CMP #32 BCC WA1 <32? CMP #96 BCC WA2 <96? RTS NEIN WA1 CL(g}C ZEICHEN<32 ADC #64 STA ZEICHEN RTS WA2 SEC ZEICHEN<96 SBC #32 STA ZEICHEN RTS(h}<96 SBC #32 STA ZEICHEN RTS(9************************************* * * SEKTOR COPY PLUS V.1.0 * * IN NUR 3 DURCHGAENGEN * * SCHREIBEN OHNE UEBERPRUEFUNG(N,j}UR XL) * ************************************* DUNIT EQU $301 DCOMND EQU $302 DBUFLO EQU $304 DBUFHI EQU $305 DAUX1 EQU $30A,k} DAUX2 EQU $30B DDEVIC EQU $300 DSTATS EQU $303 DTIMLO EQU $306 DSTAT EQU $2EA DSKINV EQU $E453 SIOV EQU $E459 SDLISTL EQU ,l}$230 CH EQU $2FC COLDST EQU $244 PORTB EQU $D301 DOSVEC EQU $A DOSINI EQU $C BASICF EQU $3F8 NUR XL/XE ! NORMAL EQU $21 ENH,m}ANCED EQU $22 ZEIGER EQU $80 ORG $0480,$A800 * RESET AUF KALTSTART SETZEN BEGIN LDA #1 KALTSTART STA COLDST BEI RESET ,n} * HAUPTPROGRAMM LDA #DLIST:L SPAR- STA SDLISTL DISPLAY- LDA #DLIST:H LIST STA SDLISTL+1 SETZEN * * BASIC AN ODER AUS ?,o} * LDA BASICF BNE GOON JMP SWITCH GOON LDA #1 FLOPPY 1 STA DUNIT READ LDA #TEXT1:L TEXT 1 STA DLIST+4 LDA #TEXT1:H ,p} STA DLIST+5 JSR TASTE * * FALLS NOETIG DIE DICHTE FESTLEGEN * LDA TEST STEHT DIE CMP #1 DICHTE FEST ? BEQ NOTEST JA,W,q}EITER JSR DETEST TESTEN * * HAUPTROUTINE (SCHREIBEN) * NOTEST LDA RAUX1 MIT RICHTI- STA DAUX1 GEM INHALT LDA RAUX2 FUELL,r}EN STA DAUX2 LDA BUFFER BUFFER STA DBUFLO BEGINN LDA BUFFER+1 FESTLEGEN STA DBUFHI TAKESEK LDA #'R SEKTOR STA DCOMND,s} LESEN JSR DSKINV DO IT BPL OKTAK JMP FEHLER OKTAK CLC NAECHSTEN INC DAUX1 SEKTOR INC RAUX1 AUCH SCH. BNE GOON1 INC ,t}DAUX2 INC RAUX2 REGISTER GOON1 LDA MAXSEK+1 SCHON ALLE CMP DAUX2 SEKTOREN BNE HI1 GELESEN ? LDA MAXSEK DANN CMP DAUX1 ,u}DIE ROUTINE HI1 BCC WRITE BEENDEN * ANSONSTEN WIRD DER BUFFER ERHOET CLC LDA DBUFLO ADC #128 STA DBUFLO BNE TAKESEK ,v}INC DBUFHI LDA DBUFHI CMP BUFHI+1 BNE TAKESEK * * ROUTINE ZUM SCHREIBEN DER SEKTORTEN * WRITE LDA #TEXT2:L TEXT 2 STA ,w}DLIST+4 SCHREIBEN LDA #TEXT2:H STA DLIST+5 JSR TASTE * * EVENTUELL DIE DISKETTE FORMATIEREN * LDA TEST SCHON CMP #1 F,x}ORMARIERT? BEQ NOINI JA,WEITER JSR FORMAT FORMATIEREN * * HAUPTROUTINE (SCHREIBEN) * NOINI LDA WAUX1 MIT RICHTI- STA DAU,y}X1 GEM INHALT LDA WAUX2 FUELLEN STA DAUX2 LDA BUFFER BUFFER STA DBUFLO BEGINN LDA BUFFER+1 FESTLEGEN STA DBUFHI * * UE,z}BERPRUEFEN OB DER SEKTOR LEER IST * PUTSEK LDY #0 LDA DBUFLO ZEIGER AUF STA ZEIGER BUFFER LDA DBUFHI RICHTEN STA ZEIGER+1,{} PRLOOP LDA (ZEIGER),Y BNE PUT NICHT LEER INY NEXT BYTE CPY #128 BNE PRLOOP JMP OKPUT * BEI LEEREN SEKTOREN NICHT SC,|}HREIBEN PUT LDA #'P SEKTOR STA DCOMND SCHREIBEN JSR DSKINV DO IT BPL OKPUT JMP FEHLER OKPUT CLC NAECHSTEN INC DAUX1,}} SEKTOR INC WAUX1 AUCH SREG BNE GOON2 INC DAUX2 MSB INC WAUX2 GOON2 LDA MAXSEK+1 SCHON ALLE CMP DAUX2 SEKTOREN BNE HI2,~} GELESEN ? LDA MAXSEK DANN CMP DAUX1 DIE ROUTINE HI2 BCS NOEND BEENDEN JMP ENDE * ANSONSTEN WIRD DER BUFFER ERHOET NOEN,}D CLC LDA DBUFLO ADC #128 STA DBUFLO BNE PUTSEK INC DBUFHI LDA DBUFHI CMP BUFHI+1 BNE PUTSEK JMP READ * * UNTERPR,}OGRAMM DENSITY-TEST * DETEST LDA #1 DOPPELTE STA DAUX1 DICHTE LDA #0 ANTESTEN STA DAUX2 LDA #'R LESEN STA DCOMND FES,}TLEGEN JSR DSKINV DO IT ! LDA #'S STA DCOMND JSR DSKINV LDA DSTAT STATUS AND #$80 DENSITY BNE ENDIN BEI MEDIUM * S,}INGLE-DENSITY-CASE LDA #720:L STA MAXSEK LDA #720:H STA MAXSEK+1 LDA #NORMAL STA DENSITY ENDIN RTS * * UNTERPROGRAMM,} (FORMATIEREN SIOV) * FORMAT LDA DENSITY BEFEHL IST STA DCOMND FORMATIEREN LDA #$31 FLOPPY STA DDEVIC LDA #0 STATUS 0 ,} STA DSTATS LDA #$A0 TIMEOUT STA DTIMLO 160 LDA #0 STA DTIMLO+1 JSR SIOV DO IT !! BMI FEHLER OKFOR LDA #1 STA TEST ,} RTS * * UNTERPROGRAMM TASTE(RETURN) * TASTE LDA CH CMP #$0C BNE TASTE LDA #$FF STA CH RTS * * FEHLERMELDUNG * FEHLER,} LDX #$FF TXS LDA #TEXT5:L STA DLIST+4 LDA #TEXT5:H STA DLIST+5 JSR TASTE * * ENDE * ENDE LDA #TEXT3:L ;LETZTEN TEXT ,}STA DLIST+4 ;SCHREIBEN LDA #TEXT3:H STA DLIST+5 JSR TASTE ;TASTE ? LDA #1 STA WAUX1 ALTE WERTE STA RAUX1 WIEDER L,}DA #0 EINSTELLEN STA WAUX2 STA RAUX2 STA TEST LDA #1040:L STA MAXSEK LDA #1040:H STA MAXSEK+1 LDA #ENHANCED STA DEN,}SITY JMP BEGIN SWITCH LDA #1 BASIC AUS- STA BASICF SCHALTEN LDA #TEXT4:L STA DLIST+4 4.TEXT LDA #TEXT4:H SCHREIBEN S,}TA DLIST+5 ENDLOS JMP ENDLOS * * KONSTANTEN UND VARIABLEN * BUFFER DFW $0700 BUFHI DFW $C000 WAUX1 DFB 1 WAUX2 DFB 0 RAUX1 ,}DFB 1 RAUX2 DFB 0 MAXSEK DFW 1040 TEST DFB 0 DENSITY DFB ENHANCED DLIST DFB $70,$70,$70 DFB $46 DFW TEXT1 DFB $41 DFW DL,}IST TEXT1 ASC % SOURCE DISK % TEXT2 ASC % DESTINATION DISK % TEXT3 ASC % RESET ODER RETURN % TEXT4 ASC %NEED 48K P,}RESS RESET% TEXT5 ASC % I/O-ERROR % ORG $02E0 DFW BEGIN4 ASC %NEED 48K P,l************************************* * * DIRECTORY MIT BEGINNSEKTOR * ************************************* * SIO-REGISTER 0} DUNIT EQU $301 DCOMND EQU $302 READ EQU $52 DBUFLO EQU $304 DBUFHI EQU $305 DAUX1 EQU $30A DAUX2 EQU $30B DSKINV EQU $E453 0}* GEMISCHTES EOL EQU $9B CH EQU $2FC * FLOATINGPOINT FR0 EQU $D4 INBUFF EQU $F3 FASC EQU $D8E6 IFP EQU $D9AA * CIO-STRUKT0}UR ICCOM EQU $342 ICBADR EQU $344 ICBLEN EQU $348 ICAUX1 EQU $34A ICAUX2 EQU $34B CIOV EQU $E456 CPTXTR EQU $09 ORG $A800 0} * * HAUPTPROGRAMM * * * ERSTEN TEXT SCHREIBEN * PROGR LDA #INTRO:L LDY #INTRO:H JSR WRITE JSR TASTE * * VORBEREITUNGEN0} * LDA #361:L ERSTEN STA BEGIN SEKTOR LDA #361:H EINSTELLEN STA BEGIN+1 LDA #0 SEK.ZAEHLER STA COUNT AUF NULL LDA 0}#32 STA LLINE+18 FREIE SEK- STA LLINE+19 TOREN AUF STA LLINE+20 NULL JSR KOPFZ LDA #1 ANZAHL AUF1 STA ANZAHL GETS L0}DA #0 ;ERST NICHTS STA BUFADD;ADDIEREN LDA BEGIN ;ERSTEN LDY BEGIN+1 ;SEKTOR JSR READSEK GET SEKTOR MAINLOOP JSR CLRSTR 0}STRING CLR JSR VORBER VORBEREITEN LDA LASTF BEQ GOON LDA #LINE:L UND DANN LDY #LINE:H AUSGEBEN ! JSR WRITE ... INC ANZ0}AHL * * BUFFERADDITION ERHOEHEN * CLC NAECHSTES LDA BUFADD FILE ADC #16 STA BUFADD CMP #$80 SEKTORENDE? BNE MAINLOOP 0}* * NAECHSTEN DIRECTORYSEKTOR LESEN * INC BEGIN ;NEXT SEKTOR INC COUNT ;COUNT OUTP.SEKTORS LDA COUNT ;SCHON 2 SEKTOREN CM0}P #2 ;AUSGEGEBEN ? BNE GOON2 ;NEIN,WEITER LDA #FORD:L;AUFFORDERN LDY #FORD:H;RET. ZU DRUECKEN JSR WRITE LDA #0 STA COU0}NT JSR TASTE ;SONST WARTEN JSR KOPFZ ;NEUE KOPFZEILE GOON2 JMP GETS * * VTOC EINLESEN UND DOS FESTLEGEN * GOON LDA VTOC10} EINLESEN LDY VTOC1+1 DES VTOC JSR READSEK SEKTORS LDY #3 LDA BUFFER,Y STA FRE LDA BUFFER+1,Y STA FRE+1 LDY #2 LDA 0}BUFFER,Y DOS VERS. CMP #707:H DOS 2.0os? BEQ SCHLUSS YES... LDA VTOC2 IF DOS 2.5 LDY VTOC2+1 VTOC2 EIN- JSR READSEK LESE0}N CLC LDY #122 LDA BUFFER,Y ADC FRE STA FRE LDA BUFFER+1,Y ADC FRE+1 STA FRE+1 * * LETZTEN TEXT VORBEREITEN * SCHLU0}SS LDA FRE ;FREIE SEKTOREN STA FR0 IN FR0 LDA FRE+1 AUCH HIBYTE STA FR0+1 JSR IFP INT-->FP JSR FASC FP -->ASCII LDY 0}#0 LDX #17 LOOP5 LDA (INBUFF),Y BMI LAST2 STA LLINE,X INY INX JMP LOOP5 LAST2 EOR #128 STA LLINE,X * * UND DEN TEXT A0}USGEBEN * LDA #UNLINE:L LDY #UNLINE:H JSR WRITE LDA #LLINE:L LDY #LLINE:H JSR WRITE JSR TASTE RTS * * RETURN-TASTE 0}ABWARTEN * TASTE LDA #$FF STA CH TALOOP LDA CH ;TASTE EINLESEN CMP #12 ;RETURN-TASTE ? BNE TALOOP;LEIDER NEIN RTS * * 0}UEBERSCHRIFFT * KOPFZ LDA #HEADLINE:L;UEBERSCHRIFT LDY #HEADLINE:H;AUSGEBEN JSR WRITE DO IT... LDA #UNLINE:L UNTER- LDY0} #UNLINE:H STREICHEN JSR WRITE RTS * * WRITE(RECORD) * WRITE LDX #0 ;KANAL 0(EDITOR) STA ICBADR STY ICBADR+1 LDA #40 0} STA ICBLEN LDA #0 STA ICBLEN+1 LDA #CPTXTR STA ICCOM FESTLEGEN JSR CIOV DO IT... RTS * * STRING LOESCHEN * CLRSTR L0}DA #32 SPACE-CODE LDX #0 AB POS. 0 LOOPLOE STA LINE,X LOESCHEN INX NAECHSTES CPX #29 SCHON 30 ? BNE LOOPLOE NEIN RTS0} * * SEKTOR LESEN * READSEK STA DAUX1 STY DAUX2 LDA #1 STA DUNIT LDA #BUFFER:L DATENBUFFER STA DBUFLO LDA #BUFFER:H0} FESTLEGEN STA DBUFHI LDA #READ STA DCOMND JSR DSKINV READ SEKTOR RTS * * KOMMENTAR,LAENGE USW. FESTLEGEN * VORBER CL0}C LDA #0 1ST BYTE ADC BUFADD;BUFFERPOSIT.ADDIER. TAY LDA BUFFER,Y TAKE IT STA FLAG STA LASTF BNE GOONVO RTS ;KEIN 0}FILE MEHR GOONVO LDA ANZAHL ;UND IN ZAHL SCHR. STA ZAHL LDA #0 ;HIBYTE=0 STA ZAHL+1 LDA #0 ;POSIT=0 STA STRPOS ;IN 0}STRING SCHR. JSR WANDEL ;DO IT... ASL FLAG;FLAG PRUEFEN BCC USED ;GELOESCHT ? LDX #0 ;DANN DEN KOMMENTAR * ;IN DER TABE0}LLE LDY #24 ;FESTLEGEN UND * ;UEBERTRAGEN JSR COMTRA;DO IT JMP LAENGE USED ASL FLAG ;PRUEFEN OB ASL FLAG ;EINTRAG GES0}ICHERT BCC NOCOM;WENN NICHT,NOCOM LDX #7;KOMMENTAR IN TABELLE * FESTLEGEN LDY #24 ;UND * UEBERTRAGEN JSR COMTRA JMP LA0}ENGE NOCOM LDX #15 ;KOMMENTAT"NOCOM" * ;FESTLEGEN LDY #24 JSR COMTRA * * NUN DIE LAENGE DES FILES FESTSTELLEN * LAENGE0} CLC LDA #1 ADC BUFADD;BUF.POSITION ADD. TAY LDA BUFFER,Y BYTE HOLEN STA ZAHL ABSPEICHERN LDA BUFFER+1,Y BYTE HOLEN S0}TA ZAHL+1 ABSPEICHERN LDA #16 POSITION 16 STA STRPOS JSR WANDEL UMWANDELN * * NUN DEN STARTSEKTOR FESTSTELLEN * CLC L0}DA #3 POSIT. 3 ADC BUFADD TAY LDA BUFFER,Y LOWBYTE STA ZAHL IN ZAHL LDA BUFFER+1,Y HI-BYTE STA ZAHL+1 IN ZAHL+1 LDA 0}#20 POSIT 20 STA STRPOS JSR WANDEL UMWANDELN * * NUN DEN FILENAMEN IN DEN STRING * CLC LDA #5 POSIT 5 ADC BUFADD TA0}Y LDX #3;POSITION 3 IM STRING LOOPNA LDA BUFFER,Y;1.BUCHSTABEN STA LINE,X ;IN DEN STRING INX ;POSIT=POSIT+1 INY ;NAECH0}STEN BUCHSTABEN TYA SEC SBC #13 SBC BUFADD BNE LOOPNA;NEIN,NEACHSTEN * * DANN DEN EXTENDER * INX ;EINE POSITION WEITER0} LOOPEX LDA BUFFER,Y;ZEICHEN STA LINE,X ;IN STRING INX ;POS=POS+1 INY ;NAECHSTES ZEICHEN TYA SEC SBC #16 SBC BUFADD 0}BNE LOOPEX;NEIN,NAECHSTES RTS ;ALLES UEBERTRAGEN * * KOMENTAR IN DEN STRING SCHREIBEN * COMTRA LDA TABLE,X ZEICHEN STA L0}INE,Y ;IN STRING INX ;NAECHSTES ZEICHEN INY ;NEXT POSITION CPY #31 ;SCHON POSITION 31? BNE COMTRA;NEIN,NAECHSTES RTS0} ;DONE... * * UMWANDELN EINER ZAHL UND ABSPEICHERN * WANDEL LDA ZAHL LAENGE STA FR0 INS LDA ZAHL+1 FP-REGISTER STA FR00}+1 SCHREIBEN JSR IFP INT->FP JSR FASC FP ->ASCII LDX STRPOS LDY #0 GETNUM LDA (INBUFF),Y ERSTES BYTE BMI LAST BIT 7 S0}ET ? STA LINE,X IN STRING INY NEXT BYTE INX NEXT POSIT. JMP GETNUM LAST AND #%01111111 RESET BIT 7 STA LINE,X STORE I0}T RTS * * VARS&TEXT * BEGIN DFW 361 ;ERSTER DIR.-SEKTOR VTOC1 DFW 360 ;VTOC-SEKTOR1 VTOC2 DFW 1024 ;NUR DOS 2.5 FRE DFW 0 0};FREIE SEKTOREN ANZAHL DFB 0 ;ANZAHL DER FILES ZAHL DFW 0 ;ZUR ZAHLENUMW. STRPOS DFB 0 ;POSITION IN "LINE" FLAG DFB 0 ;FILE-Z0}USTAND LASTF DFB 0 ;VORHANDEN-FLAG BUFADD DFB 0 ;ADDITION Z.BUFFER COUNT DFB 0 ;NUR FUER BILDSCHIRM HEADLINE ASC "}NR|FILENA0}ME|EXT|LEN|SSN|COMMENT" DFB EOL UNLINE ASC "-------------------------------" DFB EOL LINE ASC " 0} " DFB EOL TABLE ASC /DELETED/,"LOCKED NONE " LLINE ASC "FREIE SEKTOREN : " DFB EOL FORD ASC "-PRESS FOR MORE FILES-" DFB EOL INTRO ASC /}INSERT DISK IN DRIVE 1-PRESS / DFB EOL BUFFER DFB 0 ORG *+$800}DFB EOL INTRO ASC /}INSERT DISK IN DRIVE 1-PRESS / DFB EOL BUFFER DFB 0 ORG *+$800************************************* * * THE SOFTWARE BLITTER * * BY * * THE AMERICAN SOFTWARE SERVICE (ASS) * ************4}************************* SCREEN EQU $CE STRING EQU $DB DOSINI EQU $0C MEMLO EQU $2E7 XPOS1 EQU $D4 XPOS2 EQU $D5 YPOS1 EQ4}U $D6 YPOS2 EQU $D7 XLEN EQU $D8 YLEN EQU $D9 MODE EQU $DA COLOR1 EQU $2C5 SAVMSC EQU $58 ORG $2000 * * DOSINI VERBIEGEN 4}* SICHERN LDA DOSINI ;ADRESSE STA NEUINI+1 ;VON DOSINI LDA DOSINI+1;AN DIE NEUE STA NEUINI+2;STELLE SCHREIBEN LDA #NEUI4}NI:L ;DOSINI STA DOSINI ;VERBIEGEN LDA #NEUINI:H STA DOSINI+1 JSR CHARS;ZEICHENSATZCOPY JMP KALT NEUINI JSR $FFFF ;SPRU4}NG NACH DOSINI KALT LDA LORAM ;RAM SICHERN STA MEMLO LDA LORAM+1 STA MEMLO+1 JSR PMINIT;PM-GRAFIK EIN LDA #0 STA COLOR4}1 LDA #10 STA COLOR1+1 RTS LORAM DFW $2D00 LDA #0 ;EINSPRUNG FUER PUT JMP BEGIN LDA #1 ;EINSPRUNG FUER GET JMP BEGIN4} BEGIN STA MODE CLD PLA ;ANZAHL D. PARAMETER PLA PLA STA XPOS1 PLA PLA STA YPOS1 LDA MODE BEQ GSTR PLA PLA 4} STA XPOS2 PLA PLA STA YPOS2 GSTR PLA STA STRING+1 PLA STA STRING LDA MODE BEQ GOON9 PLA PLA STA FLAG GOON9 4}JSR CALC LDA MODE BEQ WRITE JSR GET LDA FLAG ;FLAG TESTEN BEQ MAINEND;0=KEINEN RAHMEN BMI INVIT;128=INVERSE LDA #0 S4}TA SPACE JMP DRAW INVIT LDA #$80 ;SONSTIGES=NICHTS STA SPACE JMP DRAW JMP DRAW WRITE JSR PUT MAINEND RTS * * ROUTIN4}E ZUR BERECHNUNG DES ANFANGS * CALC LDA YPOS1 STA SCREEN LDA #0 STA SCREEN+1 ASL SCREEN ROL SCREEN+1 SCREEN*2 ASL SCR4}EEN ROL SCREEN+1 CLC LDA SCREEN ADC YPOS1 PLUS YPOS1 STA SCREEN =SCREEN*5 BCC NOINC1 INC SCREEN+1 NOINC1 ASL SCREEN 4} ROL SCREEN+1 ASL SCREEN SCREEN*8 ROL SCREEN+1 =SCREEN*40 ASL SCREEN ROL SCREEN+1 * * SAVMSC ADDIEREN * CLC LDA SCREEN4} ADC SAVMSC STA SCREEN STA DSCRN ;FUER RAHMEN LDA SCREEN+1 ADC SAVMSC+1 STA SCREEN+1 STA DSCRN+1;FUER RAHMEN * * XPO4}S1 ADDIEREN * CLC LDA SCREEN ADC XPOS1 STA SCREEN BCC NOINC2 INC SCREEN+1 NOINC2 RTS * * GET-ROUTINE(RETTEN DES BILDE4}S) * GET SEC LAENGE LDA XPOS2 EINER ZEILE SBC XPOS1 BERECHNEN CLC ADC #1 LAENGE+1 STA XLEN UND IN DEN JSR PUTSTR ST4}RING SEC ANZAHL DER LDA YPOS2 ZEILEN+1 SBC YPOS1 FESTLEGEN CLC ADC #1 STA YLEN UND IN DEN JSR PUTSTR STRING NXTLIN4} LDY #0 ZAEHLER=0 LOOP1 LDA (SCREEN),Y ZEICHEN IN JSR PUTSTR STRING INY ;ZAEHLER ERHOEHEN CPY XLEN ;SCHON DIE LAENGE ? 4}BNE LOOP1;WENN NICHT,NOCHMAL JSR INCSCR SCREEN+40 DEC YLEN ZEILEN-1 BNE NXTLIN SCHON ALLE? RTS TSCHUESS... * * PUT (4}ZURUECKHOLEN DES ALTEN BILDES) * PUT JSR GETSTR ;ANZAHL SPALTEN STA XLEN ;HOLEN JSR GETSTR ;ANZAHL ZEILEN STA YLEN ;H4}OLEN NXTLIN2 LDY #0 LOOP2 JSR GETSTR STA (SCREEN),Y INY CPY XLEN BNE LOOP2 JSR INCSCR SCREEN+40 DEC YLEN BNE NXTLI4}N2 RTS * * UNTERPROGRAMME * * * SCREEN-ZEIGER UM 40 BYTES ERHOEHEN * INCSCR CLC LDA SCREEN ADC #40 STA SCREEN BCC NO4}INC4 INC SCREEN+1 NOINC4 RTS * * EIN BYTE AUS DEM STRING HOLEN * GETSTR LDX #0 LDA (STRING,X) INC STRING BNE ENDGET IN4}C STRING+1 ENDGET RTS * * EIN BYTE IN DEN STRING SCHREIBEN * PUTSTR LDX #0 STA (STRING,X) INC STRING BNE ENDPUT INC STR4}ING+1 ENDPUT RTS ************************************* * * The American Software Service (ASS) * * presents... * * "Fensterr4}ahmen" (V.1.0 VAR-CHAR) * ************************************* * * RAHMEN ZEICHNEN * DRAW LDA DSCRN STA SCREEN LDA DSCRN4}+1 STA SCREEN+1 LDY XPOS1 LDX YPOS1 FIRST LDY XPOS1 LDA ECK1 STA (SCREEN),Y INY LDA OBEN LOOP3 STA (SCREEN),Y INY 4}CPY XPOS2 BNE LOOP3 LDA ECK2 STA (SCREEN),Y INX CLC LDA SCREEN ADC #40 STA SCREEN BCC NXTLIN3 INC SCREEN+1 NXTLIN34} LDY XPOS1 LDA LINKS STA (SCREEN),Y INY LOOP5 LDA SPACE STA (SCREEN),Y INY CPY XPOS2 BNE LOOP5 LDA RECHTS STA (SCR4}EEN),Y CLC LDA SCREEN ADC #40 STA SCREEN BCC NOINC3 INC SCREEN+1 NOINC3 INX CPX YPOS2 BNE NXTLIN3 * * LETZTE ZEILE 4}* LDY XPOS1 LDA ECK3 STA (SCREEN),Y LDA UNTEN INY LOOP4 STA (SCREEN),Y INY CPY XPOS2 BNE LOOP4 LDA ECK4 STA (SCREE4}N),Y RTS DSCRN DFW 0 FLAG DFB 0 SPACE DFB 0 * * ZEICHENDATEN FUER DEN RAHMEN * ECK1 DFB 65 ;INTERNE CODES FUER ECK2 DFB 64}6 ;DIE ZEICHEN FUER ECK3 DFB 67 ;DEN RAHMEN ECK4 DFB 68 OBEN DFB 69 UNTEN DFB 70 RECHTS DFB 71 LINKS DFB 72 ****************4}********************* * * INVERTIEREN EINER TEILZEILE * ************************************* PLA ANZAHL PARAMETER PLA P4}LA STA ZEILE PLA PLA STA SPALT1 PLA PLA STA SPALT2 JSR CALC2 JSR INVERT RTS * * ERST DIE ZEILENPOSITION BERECH4}NEN * * * 40*ZEILENNUMMER(SPEZIELL=>SCHNELL!) * CALC2 LDA ZEILE STA SCREEN LDA #0 STA SCREEN+1 ASL SCREEN ERST SCREEN 4}ROL SCREEN+1 (ZEILE) ASL SCREEN MAL 4 ROL SCREEN+1 CLC LDA SCREEN DANN SCREEN ADC ZEILE PLUS ZEILE STA SCREEN (ZEILE*5)4} BCC NOADD1 INC SCREEN+1 NOADD1 ASL SCREEN ROL SCREEN+1 DAS GANZE ASL SCREEN MIT 8 ROL SCREEN+1 MULTIPLI- ASL SCREEN ZI4}EREN ROL SCREEN+1 (ZEILE*40)! * * NUN SAVMSC ADDIEREN * SAVADD CLC CLEAR CARRY LDA SCREEN ADC SAVMSC STA SCREEN LDA S4}CREEN+1 ADC SAVMSC+1 STA SCREEN+1 RTS READY ! * * NUN ERST INVERTIEREN * INVERT INC SPALT2 LDY SPALT1 SPALTE1 ILOOP LD4}A (SCREEN),Y GET CHAR EOR #128 REVERSE IT STA (SCREEN),Y PUT CHAR INY NXT CHAR CPY SPALT2 ALL DONE ? BNE ILOOP NO RTS4} YES * * KONSTANTEN * SPALT1 DFB 0 SPALT2 DFB 0 SPANZ DFW 0 ZEILE DFB 0 ************************************* * * PLAYER-4}PFEIL--->BY<---------------- * * THE AMERICAN SOFTWARE SERVICE(ASS) * ************************************* SDMCTL EQU $22F 4}GPRIOR EQU $26F PCOLR0 EQU $2C0 HPOSP0 EQU $D000 GRACTL EQU $D01D PMBASE EQU $D407 PLAYER EQU $D0 STICK0 EQU $278 SETVBV EQ4}U $E45C XITVBV EQU $E462 PMINIT LDA #$24 ;PLAYERBEREICH STA PMBASE;FESTLEGEN LDA #42 PLAYERGRAFIK EIN STA SDMCTL LDA #4}1 PRIORITAET STA GPRIOR EINSCHALTEN LDA #0 PLAYER STA PCOLR0 SCHWARZ LDA #100 XPOS=100 STA HPOSP0 LDA #2 PM/EIN ST4}A GRACTL * * INTERRUPT EINBINDEN * LDX #PROGRAM:H LDY #PROGRAM:L LDA #7 ;DEFERRED JSR SETVBV RTS TSCHUESS... * * JOY4}STICKABFRAGE * PROGRAM LDA SDMCTL ORA #8 STA SDMCTL JSR LOESCH LDA STICK0 JOYSTICK AND #1 UP? BNE JOY1 NO DEC YPOS4} YES JOY1 LDA STICK0 AND #2 DOWN? BNE JOY2 NO INC YPOS YES JOY2 LDA STICK0 AND #4 LEFT? BNE JOY3 NO DEC XPOS YE4}S JOY3 LDA STICK0 AND #8 RIGHT? BNE END NO INC XPOS YES END JSR POUT JMP XITVBV VBI-ENDE... * * PLAYER LOESCHEN(EINE4} SEITE) * LOESCH LDA #0 STA PLAYER LDA #$26 STA PLAYER+1 LDY $0 LDA #0 LLOOP STA (PLAYER),Y DEY BNE LLOOP RTS * * P4}LAYER AUSGEBEN * POUT CLC LDA YPOS STA PLAYER LDA #$26 STA PLAYER+1 LDA XPOS STA HPOSP0 LDY #0 ZAEHLER AUF 0 OLOOP 4}LDA PMDATE,Y 8 DATEN- STA (PLAYER),Y BYTES INY UEBER- CPY #8 TRAGEN BNE OLOOP RTS XPOS DFB 100 YPOS DFB 40 PMDATE D4}FB %11111000 DFB %11110000 DFB %11110000 DFB %11111000 DFB %10011100 DFB %00001110 DFB %00000111 DFB %00000011 ******4}******************************** * * ZEICHENSATZCOPY * * BY * * THE AMERICAN SOFTWARE SERVICE(ASS) * *******************4}******************* CHBAS EQU $2F4 ZEIGER EQU $D0 ZIEL EQU $CE CHARS LDA #0 STA ZEIGER STA ZIEL LDA CHBAS STA ZEIGER+1 4} LDA #$28 STA ZIEL+1 LDX #4 ;4 BLOECKE NXTBLK LDY #$0 BLKLOOP LDA (ZEIGER),Y STA (ZIEL),Y DEY BNE BLKLOOP INC ZEIGE4}R+1 INC ZIEL+1 DEX BPL NXTBLK LDA #$28 STA CHBAS RTS ************************************** * * BYTELOADER--V.0.1 * *4} BYE * * THE AMERICAN SOFTWARE SERVICE (ASS) * ************************************** ICCOM EQU $342 ICBADR EQU $344 ICBLEN 4}EQU $348 ICAUX1 EQU $34A ICAUX2 EQU $34B COPEN EQU 3 CCLOSE EQU 12 CGBRINR EQU 7 CPBINR EQU 11 CIOV EQU $E456 * * ALLE PARA4}METER VOM STACK HOLEN * PLA N-PARAMETER PLA PLA ;KANALNUMMER*16 ASL ASL ASL ASL TAX STX KANAL * * DATENRICHTUNG4} LESEN * PLA PLA STA RICHT BEQ WRITED LDA #4 STA ICAUX1,X LDA #0 STA ICAUX2,X JMP GOON1 WRITED LDA #8 STA ICAU5}X1,X * * DATEISTRINGADRESSE EINLESEN * GOON1 PLA STA ICBADR+1,X PLA STA ICBADR,X * * KANAL OEFFNEN * LDA #COPEN STA 5}ICCOM,X JSR CIOV * * SPEICHERADRESSE EINLESEN * LDX KANAL PLA STA ICBADR+1,X PLA STA ICBADR,X PLA STA ICBLEN+1,X 5} PLA STA ICBLEN,X * * DATENRICHTUNG FESTLEGEN * LDA RICHT BEQ GOON2 LDA #7 STA ICCOM,X JMP GOON3 GOON2 LDA #11 STA I5}CCOM,X GOON3 JSR CIOV * * KANAL WIEDER SCHLIESSEN * LDX KANAL LDA #CCLOSE STA ICCOM,X JSR CIOV RTS RICHT DFB 0 KANA5}L DFB 0 ORG $02E2 DFW SICHERNCLOSE STA ICCOM,X JSR CIOV RTS RICHT DFB 0 KANA4I************************************* * * SCREEN MOVE * * (C) BY * * THE AMERICAN SOFTWARE SERVICE (ASS) * ******************9}******************* SDLSTL EQU $230 SCREEN EQU $5000 LMS EQU $77 STICK0 EQU $278 SETVBV EQU $E45C XITVBV EQU $E462 HSCROL 9}EQU $D404 VSCROL EQU $D405 ORG $A800 LDA #35 STA 559 LDA #0 STA VSCR STA HSCR STA XPOS LDA #DLIST:L STA SDLSTL LD9}A #DLIST:H STA SDLSTL+1 LDX #MAIN:H LDY #MAIN:L LDA #7 JSR SETVBV RTS * * HAUPTPROGRAMM * MAIN JSR JOY JMP XITVBV9 } JOY LDA STICK0 AND #1 BNE GOON1 JSR OBEN GOON1 LDA STICK0 AND #2 BNE GOON2 JSR UNTEN GOON2 LDA STICK0 AND #4 BNE 9 }GOON3 JSR LINKS GOON3 LDA STICK0 AND #8 BNE GOON4 JSR RECHTS GOON4 RTS * * SCREEN-MOVING-SYSTEM * LINKS LDA XPOS CMP9 } #24 BEQ LOFF DEC HSCR LDA HSCR BMI LGROB STA HSCROL RTS LGROB INC XPOS LDA #7 STA HSCR STA HSCROL LDX #4 LLOOP 9 }CLC INC DLIST,X BCC GOON5 INC DLIST+1,X GOON5 INX INX INX CPX #43 BNE LLOOP LOFF RTS RECHTS LDA XPOS BEQ ROFF IN9 }C HSCR LDA HSCR CMP #8 BEQ RGROB STA HSCROL RTS RGROB DEC XPOS LDA #0 STA HSCR STA HSCROL LDX #4 RLOOP CLC DEC DL9}IST,X BCC GOON6 DEC DLIST+1,X GOON6 INX INX INX CPX #43 BNE RLOOP ROFF RTS * * VERTIKALES SCROLLING * OBEN LDA YPO9}S BEQ OOFF INC VSCR LDA VSCR CMP #16 BEQ OGROB STA VSCROL RTS OGROB DEC YPOS LDA #0 STA VSCR STA VSCROL LDX #4 O9}LOOP CLC LDA DLIST,X ADC #64 STA DLIST,X LDA DLIST+1,X ADC #0 STA DLIST+1,X INX INX INX CPX #43 BNE OLOOP OOFF R9}TS UNTEN LDA YPOS CMP #12 BEQ UOFF DEC VSCR LDA VSCR BMI UGROB STA VSCROL RTS UGROB INC YPOS LDA #15 STA VSCR STA9} VSCROL LDX #4 ULOOP SEC LDA DLIST,X SBC #64 STA DLIST,X LDA DLIST+1,X SBC #0 STA DLIST+1,X INX INX INX CPX #439} BNE ULOOP UOFF RTS * * VARIABLEN * HSCR DFB 0 VSCR DFB 0 XPOS DFB 0 YPOS DFB 0 * * DISPLAYLIST * DLIST DFB $70,$70,$709} DFB LMS DFW SCREEN DFB LMS DFW SCREEN+64 DFB LMS DFW SCREEN+128 DFB LMS DFW SCREEN+192 DFB LMS DFW SCREEN+256 DF9}B LMS DFW SCREEN+320 DFB LMS DFW SCREEN+384 DFB LMS DFW SCREEN+448 DFB LMS DFW SCREEN+512 DFB LMS DFW SCREEN+576 DF9}B LMS DFW SCREEN+640 DFB LMS DFW SCREEN+704 DFB $57 DFW SCREEN+768 DFB $41 DFW DLIST9}7 DFW SCREEN+768 DFB $41 DFW DLIST86************************************* * * 8-BIT-MULTIPLIKATION * * ERGEBNIS DARF 16-BIT LANG SEIN * *************************=}************ ORG $A800 CLD LDX #8 8 BITS LOOP1 LSR ZAHL1 BCC NOADD CLC LDA ERGEB ADC ZAHL2 STA ERGEB LDA ERGEB+=}1 ADC ZAHL2+1 STA ERGEB+1 NOADD ASL ZAHL2 LSR ZAHL2+1 DEX BNE LOOP1 RTS * * ADDITION * ADD CLC LDA ERGEB ADC ZAHL2 =} STA ERGEB LDA ERGEB+1 ADC ZAHL2+1 STA ERGEB+1 RTS ZAHL2 DFW $FF ZAHL1 DFB $FF STELLE DFB 0 ERGEB DFW 0=}LDA ERGEB+1 ADC ZAHL2+1 STA ERGEB+1 RTS ZAHL2 DFW $FF ZAHL1 DFB $FF STELLE DFB 0 ERGEB DFW 0< ************************************ * * THE CLOCK * * (c) BY * * THE AMERICAN SOFTWARE SERVICE (ASS) * *********************A}**************** SDMCTL EQU $22F GPRIOR EQU $26F PCOLR0 EQU $2C0 HPOSP0 EQU $D000 SIZEP0 EQU $D008 PMBASE EQU $D407 GRACTL EA}QU $D01D PLAYER EQU $80 CHARS EQU $82 CHBAS EQU $2F4 NMIEN EQU $D40E CDTMV2 EQU $21A CDTMA2 EQU $228 ORG $A800 LDA #2 A } STA GRACTL LDA #$50 STA PMBASE CLC ADC #3 STA PLAYER+1 LDA #$53 STA PMADR+1 LDA #178 STA PLAYER STA PMADR LDAA!} #42 STA SDMCTL LDA #1 STA GPRIOR CLC LDA #100 STA HPOSP0 ADC #8 STA HPOSP0+1 ADC #8 STA HPOSP0+2 ADC #8 STA HPOA"}SP0+3 LDA #0 STA PCOLR0 STA PCOLR0+1 STA PCOLR0+2 STA PCOLR0+3 LDX #$FF LOOP INX LDA #16 STA BCHST STA COUNT,X A#}JSR SEARCH JSR PUT SEC LDA PLAYER SBC #$80 STA PLAYER BCS NODEC DEC PLAYER+1 NODEC CPX #3 BNE LOOP LDA #0 STA NA$}MIEN LDA #PROGR:L STA CDTMA2 LDA #PROGR:H STA CDTMA2+1 LDA #50 STA CDTMV2 LDA #0 STA CDTMV2+1 LDA #96 STA NMIEN LA%}DA #178 STA PLAYER LDA #$53 STA PLAYER+1 RTS * * HAUPTPROGRAMM(JEDE SEKUNDE) * PROGR LDA PMADR STA PLAYER LDA PMADR+A&}1 STA PLAYER+1 INC COUNT LDA COUNT CMP #26 BNE GOON LDA #16 STA COUNT GOON STA BCHST JSR SEARCH JSR PUT * ZAEHLERA'} NEU EINRICHTEN LDA #50 STA CDTMV2 LDA #0 STA CDTMV2+1 RTS TSCHUESS... * * AUSGABEROUTINE DES SPRITES * PUT LDY #0 A(}PLOOP LDA (CHARS),Y STA (PLAYER),Y INY CPY #8 BNE PLOOP RTS * * VORBEREITEN EINES BUCHSTABENS * * MIT 8 MULTIPLIZIEREA)}N SEARCH LDA #0 STA BCHST+1 ASL BCHST ROL BCHST+1 ASL BCHST ROL BCHST+1 ASL BCHST ROL BCHST+1 * IN DEN ZEIGER SCHREA*}IBEN LDA BCHST STA CHARS LDA BCHST+1 STA CHARS+1 * CHBAS ADDIEREN CLC LDA CHARS+1 ADC CHBAS STA CHARS+1 RTS * * A+}VARIABLEN * BCHST DFW 0 COUNT DFB 0,0,0,0 PMADR DFW 0A,}ADR DFW 0@-************************************* * * FORMAT fuer OS/A+ - DOS * * (c) by * * THE AMERICAN SOFTWARE SERVICE (ASS) * ******E.}******************************* ICSTA EQU $343 ICCOM EQU $342 ICBADR EQU $344 ICBLEN EQU $348 ICAUX1 EQU $34A ICAUX2 EQU $34E/}B CIOV EQU $E456 CPTXTR EQU $09 CPBINR EQU $0B CGTXTR EQU $05 CH EQU $2FC EOL EQU $9B ORG $A800 MAIN TSX ;ALTEN STACKPOINE0}TER STX OLDSTK;RETTEN JSR LFEED LDA #TEXT1:L LDY #TEXT1:H LDX #37 JSR PUT JSR GETRET JSR LFEED JSR LFEED JSR FORE1}MAT LDA #TEXT3:L LDY #TEXT3:H LDX #37 JSR PUT JSR GETRET JSR LFEED JSR LFEED JMP MAIN RTS * * FORMATIEREN * FOE2}RMAT LDA #TEXT2:L LDY #TEXT2:H LDX #33 JSR PUT LDA #1 KANAL 1 * MIT 16 MULTIPLIZIEREN ASL ASL ASL ASL STA KANNUME3} TAX LDA #HANDLER:L STA ICBADR,X LDA #HANDLER:H STA ICBADR+1,X LDA #0 STA ICAUX1,X STA ICAUX2,X LDA #$FE STA ICCOME4},X JSR CIOV JSR LFEED JSR LFEED LDX KANNUM LDA ICSTA,X CMP #1 BEQ OK JMP FEHLER OK RTS * * FEHLERMELDUNG * FEHLEE5}R LDA #ERROR:L LDY #ERROR:H LDX #12 JSR PUT JSR LFEED JSR LFEED RTS * * PUT(RECORD) * AKKU=ADR(LO) Y=ADR(HI) * E6}X=LAENGE * PUT STX ICBLEN LDX #0 ;KANAL 0(EDITOR) STX ICBLEN+1 STA ICBADR STY ICBADR+1 LDA #CPBINR STA ICCOM FESTLEGEE7}N JSR CIOV DO IT... RTS * * GET(CHAR) RETURN abwarten * GETRET LDA #$FF STA CH TASTE LDA CH CMP #$0C BEQ BACK CMP #$E8}1C ESCAPE !? BNE TASTE LDX OLDSTK;ALTEN STACKPOINTER TXS ;WIEDER ZURUECK BACK RTS TSCHUESS... * * ZEILENVORSCHUB * LE9}FEED LDA #NXTZ:L LDY #NXTZ:H LDX #1 JSR PUT RTS * * VARIABLEN,BUFFER...USW... * TEXT1 ASC "Insert Disk in Drive 1, PresE:}s ",//," " TEXT2 ASC "Now,formatting Disk in Drive 1..." TEXT3 ASC "Press RETURN to go on or ESC to quit." ERROR ASC "IE;}/O ERROR..." NXTZ DFB EOL HANDLER ASC "D:" KANNUM DFB 0 OLDSTK DFB 0E<}ANNUM DFB 0 OLDSTK DFB 0D-************************************* * * AMERICAN SOFTWARE ANIMATION * * (C) BY * * THE AMERICAN SOFTWARE SERVICE (ASS) * **I>}*********************************** SAVMSC EQU $58 SCREEN EQU $80 STRING EQU $82 BRKKY EQU $236 VBREAK EQU $206 AUDF1 EQU I?}$D200 AUDC1 EQU $D201 AUDCTL EQU $D208 SKCTL EQU $D20F ORG $A800 * * VEKTOR FUER DIE BREAKTASTE SETZEN * ( XL/XE ONLY) * I@} LDA VBREAK STA BRKKY LDA VBREAK+1 STA BRKKY+1 * * POKEY INITIALISIEREN * LDA #0 STA AUDCTL LDA #3 STA SKCTL LDA IA}#10 STA ZEILE JSR CALC MAIN LDA #TEXT:L STA STRING LDA #TEXT:H STA STRING+1 LDA #35 STA LEN LDA #1 STA XEND LDA #0 IB} STA STRPOS JSR ANIMATE LDY #$FF LOOP2 JSR WAIT DEY BNE LOOP2 JMP MAIN * * ANIMATIONSPROGRAMM * ANIMATE LDA #39 XPOIC}SITION FESTLEGEN STA XPOS LOOP1 LDY STRPOS LDA (STRING),Y LDY XPOS STA (SCREEN),Y LDA #0 INY STA (SCREEN),Y JSR SOUID}ND JSR WAIT DEC XPOS LDA XPOS CMP XEND BNE LOOP1 LDA #0 STA AUDF1 INC XEND INC STRPOS LDA STRPOS CMP LEN BNE ANIIE}MATE RTS * * SOUND * SOUND LDA #%10101111 STA AUDC1 LDA XPOS STA AUDF1 RTS * * WARTESCHLEIFE * WAIT LDA #4 STA SCIF}HLEIF WLOOPO LDX #$FF WLOOPI DEX BNE WLOOPI DEC SCHLEIF BNE WLOOPO RTS * * ZEILENPOSITION BERECHNEN * * * 40*ZEILENNUMIG}MER(SPEZIELL=>SCHNELL!) * CALC LDA ZEILE STA SCREEN LDA #0 STA SCREEN+1 ASL SCREEN ERST SCREEN ROL SCREEN+1 (ZEILE) ASIH}L SCREEN MAL 4 ROL SCREEN+1 CLC LDA SCREEN DANN SCREEN ADC ZEILE PLUS ZEILE STA SCREEN (ZEILE*5) BCC NOADD1 INC SCREENII}+1 NOADD1 ASL SCREEN ROL SCREEN+1 DAS GANZE ASL SCREEN MIT 8 ROL SCREEN+1 MULTIPLI- ASL SCREEN ZIEREN ROL SCREEN+1 (ZEILIJ}E*40)! * * NUN SAVMSC ADDIEREN * SAVADD CLC CLEAR CARRY LDA SCREEN ADC SAVMSC STA SCREEN LDA SCREEN+1 ADC SAVMSC+1 SIK}TA SCREEN+1 RTS READY ! * * VARIABLEN * ZEILE DFB 0 LEN DFB 0 STRPOS DFB 0 XPOS DFB 0 XEND DFB 0 SCHLEIF DFB 0 TEXT ASC IL}%THE AMERICAN SOFTWARE SERVICE (ASS)% EILE DFB 0 LEN DFB 0 STRPOS DFB 0 XPOS DFB 0 XEND DFB 0 SCHLEIF DFB 0 TEXT ASC H-************************************* * * AMERICAN SOFTWARE ANIMATION * * (C) BY * * THE AMERICAN SOFTWARE SERVICE (ASS) * **MN}*********************************** SAVMSC EQU $58 SCREEN EQU $80 STRING EQU $82 AUDF1 EQU $D200 AUDC1 EQU $D201 AUDCTL EQUMO} $D208 SKCTL EQU $D20F SETVBV EQU $E45C XITVBV EQU $E462 ORG $A800 * * POKEY INITIALISIEREN * LDA #0 STA AUDCTL LDA #MP}3 STA SKCTL LDA #10 STA ZEILE JSR CALC LDA #TEXT:L STA STRING LDA #TEXT:H STA STRING+1 LDA #35 STA LEN LDA #1 SMQ}TA XEND LDA #0 STA STRPOS LDA #39 STA XPOS LDX #ANIMATE:H LDY #ANIMATE:L LDA #7 JSR SETVBV RTS * * ANIMATIONSPROGMR}RAMM * ANIMATE LDA STRPOS CMP LEN BEQ ENDRUPT LOOP1 LDY STRPOS LDA (STRING),Y LDY XPOS STA (SCREEN),Y LDA #0 INY STMS}A (SCREEN),Y JSR SOUND DEC XPOS LDA XPOS CMP XEND BNE ENDRUPT NXTCHR LDA #0 STA AUDF1 INC XEND INC STRPOS LDA #39 MT} STA XPOS ENDRUPT JMP XITVBV * * SOUND * SOUND LDA #%10101111 STA AUDC1 LDA XPOS STA AUDF1 RTS * * WARTESCHLEIFE * WMU}AIT LDA #4 STA SCHLEIF WLOOPO LDX #$FF WLOOPI DEX BNE WLOOPI DEC SCHLEIF BNE WLOOPO RTS * * ZEILENPOSITION BERECHNEN *MV} * * 40*ZEILENNUMMER(SPEZIELL=>SCHNELL!) * CALC LDA ZEILE STA SCREEN LDA #0 STA SCREEN+1 ASL SCREEN ERST SCREEN ROL SCMW}REEN+1 (ZEILE) ASL SCREEN MAL 4 ROL SCREEN+1 CLC LDA SCREEN DANN SCREEN ADC ZEILE PLUS ZEILE STA SCREEN (ZEILE*5) BCC MX}NOADD1 INC SCREEN+1 NOADD1 ASL SCREEN ROL SCREEN+1 DAS GANZE ASL SCREEN MIT 8 ROL SCREEN+1 MULTIPLI- ASL SCREEN ZIEREN MY}ROL SCREEN+1 (ZEILE*40)! * * NUN SAVMSC ADDIEREN * SAVADD CLC CLEAR CARRY LDA SCREEN ADC SAVMSC STA SCREEN LDA SCREEN+MZ}1 ADC SAVMSC+1 STA SCREEN+1 RTS READY ! * * VARIABLEN * ZEILE DFB 0 LEN DFB 0 STRPOS DFB 0 XPOS DFB 0 XEND DFB 0 SCHLEIM[}F DFB 0 TEXT ASC %THE AMERICAN SOFTWARE SERVICE (ASS)% M\}ICE (ASS)% L-************************************* * * PLAYER BEWEGUNG * ************************************* PMBASE EQU $D407 SDMCTL EQQ^}U $22F GPRIOR EQU $26F PCOLR0 EQU $2C0 HPOSP0 EQU $D000 GRACTL EQU $D01D STICK0 EQU $278 SIZEP0 EQU $D008 PLAYER EQU $80 DATQ_}ES EQU $82 SETVBV EQU $E45C XITVBV EQU $E462 CDTMV5 EQU $220 CDTMF5 EQU $22E SDLSTL EQU $230 ORG $A800 * * ERST DEN PLAYERQ`} INITIALISIEREN * LDA #DLIST:L STA SDLSTL LDA #DLIST:H STA SDLSTL+1 LDA #42 STA SDMCTL LDA #0 STA GPRIOR LDA #$50 Qa}STA PMBASE LDA #3 STA GRACTL P&M EINSCH. LDA #10 STA PCOLR0 SCHWARZ STA 710 LDA #1 STA SIZEP0 * * NUN DEN ZEIGER FESTLQb}EGEN * LDA #0 ERST DEN STA PLAYER ZEIGER LDA #$52 AUF DEN STA PLAYER+1 PLAYER LDA #120 STA XPOS STA HPOSP0 LDX #2Qc}00 ULOOP JSR UP DEX BNE ULOOP * * NUN DEN INTERRUPT EINBINDEN * LDA #7 DEFFERED LDX #PROGR:H LDY #PROGR:L JSR SETVBV Qd} LDA #5 STA CDTMV5 LDA #0 STA CDTMV5+1 STA CDTMF5 RTS * * HAUPTPROGRAMM(JOYSTICKABFRAGE) * PROGR LDA CDTMF5 BNE GOON Qe} JSR LOESCH JSR LEFT JSR UP JSR CALC LDA #0 STA CDTMF5 INC SHAPE SHAPE LDA #5 ZEIT NEU STA CDTMV5 EINRICHTEN LDAQf} #0 STA CDTMV5+1 GOON LDA SHAPE CMP #9 BNE ENDE LDA #0 STA SHAPE ENDE JMP XITVBV * * PLAYER UP * UP DEC PLAYER LDYQg} #0 LOOP1 LDA (DATES),Y STA (PLAYER),Y INY CPY #8 BNE LOOP1 LDA #0 STA (PLAYER),Y RTS * * PLAYER DOWN(PARALLEL ZU OBEQq}@̠@@@ @㠠@@ b%DOS SYSb*)DUP SYSbSAUTORUN SYSbUGRATEXT SRCb%iSEKCOPY SRCb3CATALOG SRCbDWINDOW SRCbSCROLL SRCbMULTI SRCbCLOCK SRCb-FORMAT SRCb=ANIMATE SRCbMANIMATE2SRCb]ROTATEI SRCbANIMATE3SRCb&SHAPES SRCbCOLOR256SRCb COL256B SRCb COLMODE SRCb COL256 SRCbFONTER SRCbFONTER2 SRCbHGRSHAPESRCb ,FASTPLOTSRCb29GAME1 SRCb kGTIA SRCb uBZINVERTSRCbDISKNAMESRCbANTICF SRCbROULETTESRC#SEKSTAT SRC#$SEKEDIT SRC# LOADPIC SRC# PICLOAD SRC#0SEKCOPY2SRC#LMICLOAD SRC#SDIVI SRC# XPICLDLI SRC#bGETSEK SRC#iPUTREC SRC#pCONVERT SRC@ @à@@ @ͮ@堲@N !) * DOWN LDY #0 LDA #0 STA (PLAYER),Y INC PLAYER LOOP2 LDA (DATES),Y STA (PLAYER),Y CPY #8 BNE LOOP2 RTS * * PLAYQr}ER LEFT * LEFT DEC XPOS LDA XPOS STA HPOSP0 RTS * * PLAYER RIGHT * RIGHT INC XPOS LDA XPOS STA HPOSP0 RTS LOESCH LDQs}Y #0 LDA #0 LOOP3 STA (PLAYER),Y INY CPY #8 BNE LOOP3 RTS * * ROUTINE ZUR BERECHNUNG DER DATENADR. * CALC LDA SHAPE STAQt} DATES LDA #0 STA DATES+1 * ERST DIE NUMMER MIT 8 MULTIPLIZIEREN CLC ASL DATES ROL DATES+1 ASL DATES ROL DATES+1 ASQu}L DATES ROL DATES+1 * DANN ZU DER TABELLENADR ADDIEREN CLC LDA DATES ADC #TAB:L STA DATES LDA DATES+1 ADC #TAB:H STQv}A DATES+1 RTS * * PLAYERDATEN * SHAPE DFB 0 XPOS DFB 0 TAB DFB %01111110 DFB %01111110 DFB %00011000 DFB %00011000 DFQw}B %00011000 DFB %00011000 DFB %01111110 DFB %01111110 DFB %00000000 DFB %01111110 DFB %00011000 DFB %00011000 DFB %0Qx}0011000 DFB %00011000 DFB %01111110 DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %00011000 DFB %00011Qy}000 DFB %01111110 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %01111110 Qz} DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFBQ{} %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %00000000 DFB %00Q|}000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %01111110 DFB %000000Q}}00 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %00011000 DFB %00011000 DFB %01111110 Q~}DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %00011000 DFB %00011000 DFB %00011000 DFB %00011000 DFB Q}%01111110 DFB %00000000 DLIST DFB $70,$70,$70,$70,$70 DFB $47 DFW TEXT0 DFB $70,$70,$70,$70 DFB $47 DFW TEXT1 DFB $70Q},$70,$70,$70 DFB $47 DFW TEXT2 DFB $41 DFW DLIST TEXT0 ASC % THE % TEXT1 ASC % AMERICAN SOFTWARE % TEXTQ}2 ASC % SERVICE % % TEXT1 ASC % AMERICAN SOFTWARE % TEXTPQ************************************* * * AMERICAN SOFTWARE ANIMATION * * (C) BY * * THE AMERICAN SOFTWARE SERVICE (ASS) * **U}*********************************** SAVMSC EQU $58 SDLSTL EQU $230 SCREEN EQU $80 STRING EQU $82 BRKKY EQU $236 VBREAK EQUU} $206 AUDF1 EQU $D200 AUDC1 EQU $D201 AUDCTL EQU $D208 SKCTL EQU $D20F ORG $A800 * * NEUE DISPLAYLIST * LDA SAVMSC STAU} DLIST+4 LDA SAVMSC+1 STA DLIST+5 LDA #DLIST:L STA SDLSTL LDA #DLIST:H STA SDLSTL+1 * * VEKTOR FUER DIE BREAKTASTE SETU}ZEN * ( XL/XE ONLY) * LDA VBREAK STA BRKKY LDA VBREAK+1 STA BRKKY+1 * * POKEY INITIALISIEREN * LDA #0 STA AUDCTL LDU}A #3 STA SKCTL LDA #2 STA ZEILE JSR CALC MAIN LDA #TEXT:L STA STRING LDA #TEXT:H STA STRING+1 LDA #20 STA LEN LDAU} #$FF STA XEND LDA #0 STA STRPOS JSR ANIMATE LDY #$FF LOOP2 JSR WAIT DEY BNE LOOP2 JMP MAIN * * ANIMATIONSPROGRAMU}M * ANIMATE LDA #19 XPOSITION FESTLEGEN STA XPOS LOOP1 LDY STRPOS LDA (STRING),Y LDY XPOS STA (SCREEN),Y LDA #0 INY U}STA (SCREEN),Y JSR SOUND JSR WAIT DEC XPOS LDA XPOS CMP XEND BNE LOOP1 LDA #0 STA AUDF1 INC XEND INC STRPOS LDA U}STRPOS CMP LEN BNE ANIMATE RTS * * SOUND * SOUND LDA #%10101111 STA AUDC1 LDA XPOS STA AUDF1 RTS * * WARTESCHLEIFU}E * WAIT LDA #10 STA SCHLEIF WLOOPO LDX #$FF WLOOPI DEX BNE WLOOPI DEC SCHLEIF BNE WLOOPO RTS * * ZEILENPOSITION BEREU}CHNEN * * * 40*ZEILENNUMMER(SPEZIELL=>SCHNELL!) * CALC LDA ZEILE STA SCREEN LDA #0 STA SCREEN+1 ASL SCREEN ERST SCREEN U} ROL SCREEN+1 (ZEILE) ASL SCREEN MAL 4 ROL SCREEN+1 CLC LDA SCREEN DANN SCREEN ADC ZEILE PLUS ZEILE STA SCREEN (ZEILE*5U}) BCC NOADD1 INC SCREEN+1 NOADD1 ASL SCREEN ROL SCREEN+1 DAS GANZE ASL SCREEN MIT 8 ROL SCREEN+1 MULTIPLI- * * NUN SAVU}MSC ADDIEREN * SAVADD CLC CLEAR CARRY LDA SCREEN ADC SAVMSC STA SCREEN LDA SCREEN+1 ADC SAVMSC+1 STA SCREEN+1 RTS RU}EADY ! * * VARIABLEN * ZEILE DFB 0 LEN DFB 0 STRPOS DFB 0 XPOS DFB 0 XEND DFB 0 SCHLEIF DFB 0 TEXT ASC %*AMERICAN SOFTWARU}E*% DLIST DFB $70,$70,$70,$46 DFW 0 ;SAVMSC GOES HERE DFB 6,6,6,6,6,6,6,6,6,6,6,6 DFB 6,6,6,6,6,6,6,6,6,6,6 DFB $41 DFU}W DLIST HERE DFB 6,6,6,6,6,6,6,6,6,6,6,6 DFB 6,6,6,6,6,6,6,6,6,6,6 DFB $41 DFT3************************************* * * THE AMERICAN SOFTWARE SERVICE (ASS) * * PRESENTS... * * THE US-SHAPE-MOVER * ******Y}******************************* PMBASE EQU $D407 SDMCTL EQU $22F GPRIOR EQU $26F PCOLR0 EQU $2C0 HPOSP0 EQU $D000 GRACTL EQUY} $D01D STICK0 EQU $278 SIZEP0 EQU $D008 PLAYER EQU $80 DATES EQU $82 SETVBV EQU $E45C XITVBV EQU $E462 CDTMV5 EQU $220 CDTMY}F5 EQU $22E SDLSTL EQU $230 ORG $A800 * * ERST DEN PLAYER INITIALISIEREN * LDA #DLIST:L STA SDLSTL LDA #DLIST:H STA SDLY}STL+1 LDA #42 STA SDMCTL LDA #0 STA GPRIOR LDA #$50 STA PMBASE LDA #3 STA GRACTL P&M EINSCH. LDA #10 STA PCOLR0 SCY}HWARZ STA PCOLR0+1 STA PCOLR0+2 LDA #1 STA SIZEP0 STA SIZEP0+1 STA SIZEP0+2 * * PLAYER0 IN DIE MITTE * LDA #0 LDX Y}#0 JSR CALC LDA #200 STA XPOS STA HPOSP0 LDA #220 STA XPOS+1 STA HPOSP0+1 LDA #240 STA XPOS+2 STA HPOSP0+2 LDAY} #80 STA ZAEHL ZLOOP LDX #0 LDX #0 JSR DOWN LDX #2 JSR DOWN LDX #4 JSR DOWN DEC ZAEHL BNE ZLOOP LDX #2 JSR DOWN Y} JSR DOWN LDX #4 JSR DOWN JSR DOWN JSR DOWN JSR DOWN * * NUN DEN INTERRUPT EINBINDEN * LDA #7 DEFFERED LDX #PROGR:Y}H LDY #PROGR:L JSR SETVBV LDA #5 STA CDTMV5 LDA #0 STA CDTMV5+1 STA CDTMF5 RTS * * HAUPTPROGRAMM(JOYSTICKABFRAGE) * Y}PROGR LDA CDTMF5 BNE GOON LDA #0 STA CDTMF5 LDX #0 LDA SHAPE JSR CALC INC SHAPE * * PLAYER 0 BEWEGEN * LDX #0 JSY}R LOESCH JSR UP JSR LEFT JSR LEFT * * PLAYER 1 BEWEGEN * LDX #2 JSR LOESCH JSR UP LDX #1 JSR LEFT JSR LEFT * * PLAY}YER 2 BEWEGEN * LDX #4 JSR LOESCH JSR UP LDX #2 JSR LEFT JSR LEFT LDA #5 ZEIT NEU STA CDTMV5 EINRICHTEN LDA #0 STY}A CDTMV5+1 GOON LDA SHAPE CMP #9 BNE ENDE LDA #0 STA SHAPE ENDE JMP XITVBV * * PLAYER UP * X-REGISTER=PLAYERNUMMER*2 Y}UP LDA PMADR,X STA PLAYER LDA PMADR+1,X STA PLAYER+1 DEC PLAYER DEC PMADR,X BNE GOON1 LDA #$80 STA PMADR,X STA PLAYY}ER JMP GOON2 GOON1 LDA PMADR,X CMP #$80 BNE GOON2 LDA #$00 STA PMADR,X STA PLAYER GOON2 LDY #0 LOOP1 LDA (DATES),Y SY}TA (PLAYER),Y INY CPY #8 BNE LOOP1 LDA #0 STA (PLAYER),Y RTS * * PLAYER DOWN(PARALLEL ZU OBEN !) * X-REGISTER=PLAYERNUY}MMER DOWN LDA PMADR,X STA PLAYER LDA PMADR+1,X STA PLAYER+1 LDY #0 LDA #0 STA (PLAYER),Y INC PLAYER INC PMADR,X BNY}E GOON3 LDA #$80 STA PMADR,X STA PLAYER JMP LOOP2 GOON3 LDA PMADR,X CMP #$80 BNE LOOP2 LDA #0 STA PMADR,X STA PLAYEY}R LOOP2 LDA (DATES),Y STA (PLAYER),Y INY CPY #8 BNE LOOP2 RTS * * PLAYER LEFT * X-REGISTER=PLAYERNUMMER(0-3) LEFT DECY} XPOS,X LDA XPOS,X STA HPOSP0,X RTS * * PLAYER RIGHT * X-REGISTER=PLAYERNUMMER! RIGHT INC XPOS,X LDA XPOS,X STA HPOSP0Y},X RTS * * EINEN PLAYER LOESCHEN * X-REGISTER=(PM-NUMMER*2) LOESCH LDA PMADR,X ZEIGER AUF STA PLAYER DEN PM-BE- LDA PMADY}R+1,X REICH LADEN STA PLAYER+1 LDY #0 LDA #0 LOOP3 STA (PLAYER),Y INY CPY #8 BNE LOOP3 RTS * * ROUTINE ZUR BERECHNUNG Y}DER DATENADR. * AKKU=SHAPENNUMMER,XR=PM-NUMMER*2 CALC ASL ASL ;AKKU*8 ASL STA DATES LDA #0 STA DATES+1 CLC LDA SHPAY}DR,X ;SHAPE- ADC DATES ;BEGINN STA DATES ;ADDIEREN! LDA SHPADR+1,X ADC DATES+1 STA DATES+1 RTS * * PLAYERDATEN * ZAEY}HL DFB 0 PMADR DFW $5200,$5280,$5300,$5380 LOWBYT DFB $00,$80,$00,$80 SHAPE DFB 0,0,0,0 XPOS DFB 0,0,0,0 SHPADR DFW TAB0Y},TAB1,TAB2,TAB3 TAB0 DFB %01111110 DFB %01111110 DFB %00011000 DFB %00011000 DFB %00011000 DFB %00011000 DFB %01111110Y} DFB %01111110 DFB %00000000 DFB %01111110 DFB %00011000 DFB %00011000 DFB %00011000 DFB %00011000 DFB %01111110 DFY}B %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %00011000 DFB %00011000 DFB %01111110 DFB %00000000 DFB %0Y}0000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %01111110 DFB %00000000 DFB %00000000 DFB %00000Y}000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %00000000 DFB %00000000 DFB %00000000 Y} DFB %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %00000000 DFB %00000000 DFB %00000000 DFB %00000000 DFY}B %00000000 DFB %00000000 DFB %00000000 DFB %01111110 DFB %01111110 DFB %00000000 DFB %00000000 DFB %00000000 DFB %0Y}0000000 DFB %00000000 DFB %01111110 DFB %00011000 DFB %00011000 DFB %01111110 DFB %00000000 DFB %00000000 DFB %00000Y}000 DFB %01111110 DFB %00011000 DFB %00011000 DFB %00011000 DFB %00011000 DFB %01111110 DFB %00000000 TAB1 DFB 0 TAB2Y} DFB 0 TAB3 DFB 0 DLIST DFB $70,$70,$70,$70,$70 DFB $47 DFW TEXT0 DFB $70,$70,$70,$70 DFB $47 DFW TEXT1 DFB $70,$70,$7Y}0,$70 DFB $47 DFW TEXT2 DFB $41 DFW DLIST TEXT0 ASC % THE % TEXT1 ASC % AMERICAN SOFTWARE % TEXT2 ASC %Y} SERVICE % % TEXT2 ASC %Xo************************************* * * THE AMERICAN SOFTWARE SERVICE (ASS) * * PRESENTS * * 256 FARBEN... * ************]}************************* NMIEN EQU $D40E;INTERRUPTMASKE VDSLST EQU $200 ;DLI-ADRESSE SDLSTL EQU $230 ;DISPLAYLISTADRESSE VV]}BLKD EQU $224 ;VBI(DEFFERED) XITVBV EQU $E462;VBI VERLASSEN COLBK EQU $D01A;FARBREGISTER 4(H) WSYNC EQU $D40A;KEIN FLIMMERN.]}.. DINDEX EQU $57 ;MODE ZEIGER EQU $D0 ORG $A800 LDA DINDEX GRAPHICS 9? CMP #9 BEQ GOON1 JMP ENDE * * DLI-FLAGS SETZ]}EN * GOON1 LDA SDLSTL STA ZEIGER LDA SDLSTL+1 STA ZEIGER+1 LDY #3 JSR SETBIT LDY #99 JSR SETBIT * * DLI&VBI EINBINDEN]} * LDA #0 STA NMIEN LDA #DLI:L STA VDSLST LDA #DLI:L STA VDSLST * UND VBI... LDA #VBI:L STA VVBLKD LDA #VBI:H ST]}A VVBLKD * DANN DIE INTERRUPTS FREIGEBEN LDA #192 STA NMIEN ENDE RTS ;DAS WARS... * * UNTERPROGRAMM ZUM SETZEN DER BITS]} * SETBIT LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY INY LDX #0 LOOP LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY INX]} CPX #96 BNE LOOP RTS * * DLI-ROUTINE * DLI PHA ;AKKU RETTEN TXA PHA ;X-REGISTER RETTEN LDX LINE ;ZEILENNUMMER HOLEN]} LDA TAB,X;FARBE HOLEN STA WSYNC;SYNCHRONISIEREN STA COLBK;FARBE AENDERN INC LINE ;ZEILE ERHOEHEN PLA ;X-REGISTER ZURUEC]}K TAX PLA ;AKKU ZURUECK RTI ;TSCHUESS... * * VBI-ROUTINE * VBI LDA #0 ;ZEILENNUMMER STA LINE ;WIEDER AUF NULL! JMP XIT]}VBV;TSCHUESS... LINE DFB 0 * * FARBWERTETABELLE(192 ZAHLEN) * ORG $0600 TAB DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0]},0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0]},0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0]},0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0]},0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0,0,0,0,0,0,0,0,0 DFB 0,0]},0,0,0 DFB 0,0\0************************************* * * THE AMERICAN SOFTWARE SERVICE (ASS) * * PRESENTS * * 256 FARBEN... * ************a}************************* NMIEN EQU $D40E;INTERRUPTMASKE VDSLST EQU $200 ;DLI-ADRESSE SDLSTL EQU $230 ;DISPLAYLISTADRESSE VVa}BLKI EQU $222 ;VBI(IMEDIATE) SYSVBV EQU $E45F;VBI VERLASSEN COLBK EQU $D01A;FARBREGISTER 4(H) WSYNC EQU $D40A;KEIN FLIMMERN.a}.. DINDEX EQU $57 ;MODE ZEIGER EQU $D0 ORG $7000 * * DLI-FLAGS SETZEN * PLA LDA SDLSTL STA ZEIGER LDA SDLSTL+1 STa}A ZEIGER+1 LDY #2 LDA (ZEIGER),Y EOR #$80 STA (ZEIGER),Y INY JSR SETBIT * LDY #99 * JSR SETBIT * * DLI&VBI EINBINDEN *a} LDA #0 STA NMIEN LDA #DLI:L STA VDSLST LDA #DLI:H STA VDSLST+1 LDA #VBI:L STA VVBLKI LDA #VBI:H STA VVBLKI+1 a}* DANN DIE INTERRUPTS FREIGEBEN LDA #192 STA NMIEN ENDE RTS ;DAS WARS... * * UNTERPROGRAMM ZUM SETZEN DER BITS * SETBITa} LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY INY INY LOOP LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY CPY #100 BNE LOa}OP INY INY LOOP2 LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY CPY #197 BNE LOOP2 BNE LOOP RTS * * DLI-ROUTINE * Da}LI PHA ;AKKU RETTEN TXA PHA ;X-REGISTER RETTEN LDX LINE ;ZEILENNUMMER HOLEN LDA TAB,X;FARBE HOLEN STA WSYNC;SYNCHRONISIa}EREN STA COLBK;FARBE AENDERN INX ;ZEILE ERHOEHEN STX LINE PLA ;X-REGISTER ZURUECK TAX PLA ;AKKU ZURUECK RTI ;TSCHUESSa}... LINE DFB 0 VBI LDA #0 STA LINE JMP SYSVBV * * FARBWERTETABELLE(192 ZAHLEN) * ORG $0600 TAB DFB 0,0a}E JMP SYSVBV * * FARBWERTETABELLE(192 ZAHLEN) * ORG $0600 TAB DFB 0,0`$************************************* * * THE AMERICAN SOFTWARE SERVICE (ASS) * * PRESENTS * * 256 FARBEN... * ************e}************************* NMIEN EQU $D40E;INTERRUPTMASKE VDSLST EQU $200 ;DLI-ADRESSE SDLSTL EQU $230 ;DISPLAYLISTADRESSE VVe}BLKI EQU $222 ;VBI(IMEDIATE) SYSVBV EQU $E45F;VBI VERLASSEN COLBK EQU $D01A;FARBREGISTER 4(H) WSYNC EQU $D40A;KEIN FLIMMERN.e}.. DINDEX EQU $57 ;MODE ZEIGER EQU $D0 ORG $A800 * * DLI-FLAGS SETZEN * GOON1 LDA SDLSTL STA ZEIGER LDA SDLSTL+1 STe}A ZEIGER+1 LDY #2 LDA (ZEIGER),Y EOR #$80 STA (ZEIGER),Y INY JSR SETBIT * LDY #99 * JSR SETBIT * * DLI&VBI EINBINDEN *e} LDA #0 STA NMIEN LDA #DLI:L STA VDSLST LDA #DLI:H STA VDSLST+1 LDA #VBI:L STA VVBLKI LDA #VBI:H STA VVBLKI+1 e}* DANN DIE INTERRUPTS FREIGEBEN LDA #192 STA NMIEN ENDE RTS ;DAS WARS... * * UNTERPROGRAMM ZUM SETZEN DER BITS * SETBITe} LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY INY INY LOOP LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY CPY #27 BNE LOOe}P RTS * * DLI-ROUTINE * DLI PHA ;AKKU RETTEN TXA PHA ;X-REGISTER RETTEN LDX LINE ;ZEILENNUMMER HOLEN LDA TAB,X;FARBEe} HOLEN STA WSYNC;SYNCHRONISIEREN STA COLBK;FARBE AENDERN INX ;ZEILE ERHOEHEN STX LINE PLA ;X-REGISTER ZURUECK TAX PLAe} ;AKKU ZURUECK RTI ;TSCHUESS... LINE DFB 0 VBI LDA #0 STA LINE JMP SYSVBV * * FARBWERTETABELLE(192 ZAHLEN) * ORG $060e}0 TAB DFB 0,0 LINE DFB 0 VBI LDA #0 STA LINE JMP SYSVBV * * FARBWERTETABELLE(192 ZAHLEN) * ORG $060d!************************************* * * THE AMERICAN SOFTWARE SERVICE (ASS) * * PRESENTS * * 256 FARBEN... * ************i}************************* NMIEN EQU $D40E;INTERRUPTMASKE VDSLST EQU $200 ;DLI-ADRESSE SDLSTL EQU $230 ;DISPLAYLISTADRESSE VVi}BLKI EQU $222 ;VBI(IMEDIATE) SYSVBV EQU $E45F;VBI VERLASSEN COLBK EQU $D01A;FARBREGISTER 4(H) WSYNC EQU $D40A;KEIN FLIMMERN.i}.. DINDEX EQU $57 ;MODE LINE EQU $CF ZEIGER EQU $D0 ORG $7000 * * DLI-FLAGS SETZEN * PLA LDA SDLSTL STA ZEIGER LDi}A SDLSTL+1 STA ZEIGER+1 LDY #2 LDA (ZEIGER),Y EOR #$80 STA (ZEIGER),Y INY JSR SETBIT * * DLI&VBI EINBINDEN * LDA #0i} STA NMIEN LDA #DLI:L STA VDSLST LDA #DLI:H STA VDSLST+1 LDA #VBI:L STA VVBLKI LDA #VBI:H STA VVBLKI+1 * DANN DIi}E INTERRUPTS FREIGEBEN LDA #192 STA NMIEN ENDE RTS ;DAS WARS... * * UNTERPROGRAMM ZUM SETZEN DER BITS * SETBIT LDA (ZEIi}GER),Y ORA #$80 STA (ZEIGER),Y INY INY INY LOOP LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY CPY #100 BNE LOOP INY i} INY LOOP2 LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY CPY #197 BNE LOOP2 RTS * * DLI-ROUTINE * DLI PHA ;AKKU RETTENi} TXA PHA ;X-REGISTER RETTEN LDX LINE ;ZEILENNUMMER HOLEN LDA TAB,X;FARBE HOLEN INX STX LINE STA WSYNC;SYNCHRONISIEREi}N STA COLBK;FARBE AENDERN PLA ;X-REGISTER ZURUECK TAX PLA ;AKKU ZURUECK RTI ;TSCHUESS... VBI LDA #0 STA LINE JMP SYi}SVBV * * FARBWERTETABELLE(192 ZAHLEN) * ORG $0600 TAB DFB 0,0i}N) * ORG $0600 TAB DFB 0,0h$************************************* * * THE FONT-SEARCHER V.1.0 * * BY * * THE AMERICAN SOFTWARE SERVICE(ASS) * ***********m}************************** ICBADR EQU $344 ICCOM EQU $342 ICBLEN EQU $348 CPTXTR EQU $09 CIOV EQU $E456 DUNIT EQU $301 DCOMm}ND EQU $302 DBUFLO EQU $304 DBUFHI EQU $305 DAUX1 EQU $30A DAUX2 EQU $30B DSKINV EQU $E453 CH EQU $2FC ORG $A800 * * HAUPm}TPROGRAMM * LDA #0 STA 709 LDA #10 STA 710 JSR CLS * * ERST DEN STRING FUELLEN * LDA #1 STA 766 CLC LDA #0 STA m}CHR CHLOOP2 LDX #0 CHLOOP LDA CHR STA STRING1,X INC CHR LDA CHR BEQ LAST INX CPX #37 BNE CHLOOP LDA #STRING1:L LDYm} #STRING1:H JSR WRITE JSR LOESCH JMP CHLOOP2 LAST LDA #STRING1:L LDY #STRING1:H JSR WRITE LDA #0 STA 766 LDA #$50 m}STA 54281 STA 756 LDA #1 STA SECNUM LDA #0 STA SECNUM+1 GSLOOP JSR GETSEC BMI END1 LDA #$FF STA CH TASTE LDA CH CMm}P #$FF BEQ TASTE JMP GSLOOP END1 RTS * * GET 4 SECTORS * GETSEC LDA #0 STA DBUFLO STA COUNT LDA #$50 STA DBUFHI RELm}OOP LDA SECNUM STA DAUX1 LDA SECNUM+1 STA DAUX2 LDA #1 STA DUNIT LDA #'R STA DCOMND JSR DSKINV BMI ENDE CLC LDA m}DBUFLO ADC #128 STA DBUFLO BCC NOINC1 INC DBUFHI NOINC1 INC DAUX1 BNE NOINC2 INC DAUX2 NOINC2 INC COUNT LDA COUNT m}CMP #9 BNE RELOOP ENDE INC SECNUM BNE GOON2 INC SECNUM+1 GOON2 RTS * * WRITE(RECORD) * WRITE LDX #0 ;KANAL 0(EDITOR) m} STA ICBADR STY ICBADR+1 LDA #37 STA ICBLEN LDA #0 STA ICBLEN+1 LDA #CPTXTR STA ICCOM FESTLEGEN JSR CIOV DO IT... Rm}TS * * BILDSCHIRM LOESCHEN * CLS LDX #0 LDA #0 STA ICBLEN LDA #0 STA ICBLEN+1 LDA #11 STA ICCOM LDA #125 JSR CIOV m} RTS * * LOESCHEN DES STRINGS * LOESCH LDX #0 LDA #32 LOLOOP STA STRING1,X INX CPX #38 BNE LOLOOP RTS * * VARIABLEN UNm}D STRINGS * SECNUM DFW 1 COUNT DFB 0 CHR DFB 0 STRING1 ASC " " ORG $5000 BUFFER DFn}B 0 0 STRING1 ASC " " ORG $5000 BUFFER DFl-************************************* * * THE FONT-SEARCHER V.1.0 * * BY * * THE AMERICAN SOFTWARE SERVICE(ASS) * ***********r}************************** ICBADR EQU $344 ICCOM EQU $342 ICBLEN EQU $348 CPTXTR EQU $09 CIOV EQU $E456 DUNIT EQU $301 DCOMr}ND EQU $302 DBUFLO EQU $304 DBUFHI EQU $305 DAUX1 EQU $30A DAUX2 EQU $30B DSKINV EQU $E453 CH EQU $2FC ZEIGER EQU $80 ORG r}$A800 * * HAUPTPROGRAMM * LDA #0 STA 709 JSR CLS * * ERST DEN STRING FUELLEN * LDA #1 STA 766 CLC LDA #0 STA CHRr} CHLOOP2 LDX #0 CHLOOP LDA CHR STA STRING1,X INC CHR LDA CHR BEQ LAST INX CPX #37 BNE CHLOOP LDA #STRING1:L LDY #Sr}TRING1:H JSR WRITE JSR LOESCH JMP CHLOOP2 LAST LDA #STRING1:L LDY #STRING1:H JSR WRITE LDA #0 STA 766 LDA #$54 STAr} 54281 STA 756 LDA #1 STA SECNUM LDA #0 STA SECNUM+1 GSLOOP JSR GETSEC LDA #$FF STA CH TASTE LDA CH CMP #$FF BEQ Tr}ASTE JMP GSLOOP END1 RTS * * GET 9 SECTORS * GETSEC LDA #$0 STA ZEIGER LDA #$54 STA ZEIGER+1 LDA #0 STA DBUFLO STAr } COUNT LDA #$50 STA DBUFHI LDA SECNUM STA DAUX1 LDA SECNUM+1 STA DAUX2 RELOOP LDA #1 STA DUNIT LDA #'R STA DCOMND r } JSR DSKINV BMI ENDE JSR TRANSP NOINC1 INC DAUX1 BNE NOINC2 INC DAUX2 NOINC2 INC COUNT LDA COUNT CMP #10 BNE RELOOPr } ENDE INC SECNUM BNE GOON2 INC SECNUM+1 GOON2 RTS * * WRITE(RECORD) * WRITE LDX #0 ;KANAL 0(EDITOR) STA ICBADR STY Ir }CBADR+1 LDA #37 STA ICBLEN LDA #0 STA ICBLEN+1 LDA #CPTXTR STA ICCOM FESTLEGEN JSR CIOV DO IT... RTS * * BILDSCHIRMr } LOESCHEN * CLS LDX #0 LDA #0 STA ICBLEN LDA #0 STA ICBLEN+1 LDA #11 STA ICCOM LDA #125 JSR CIOV RTS * * LOESCHEN r}DES STRINGS * LOESCH LDX #0 LDA #32 LOLOOP STA STRING1,X INX CPX #38 BNE LOLOOP RTS * * DATEN AUS DEM BUFFER LESEN * r}TRANSP LDY #0 TRLOOP LDA BUFFER,Y STA (ZEIGER),Y INY CPY #125 BNE TRLOOP * ZEIGER ERHOEHEN CLC LDA ZEIGER ADC #125 r} STA ZEIGER BCC NOINC3 INC ZEIGER+1 NOINC3 RTS * * VARIABLEN UND STRINGS * SECNUM DFW 1 COUNT DFB 0 CHR DFB 0 STRING1 r}ASC " " ORG $5000 BUFFER DFB 0r} $5000 BUFFER DFB 0p3************************************* * * SHAPES (FUER GRAPHICS 8) * * BY * * THE AMERICAN SOFTWARE SERVICE (ASS) * *********v}**************************** SAVMSC EQU $58 SCREEN EQU $D0 STICK0 EQU $278 ORG $5000 PLA JSR CALC ENDLOS LDA STICK0 Cv}MP #1 BNE GOON6 JSR UP GOON6 LDA STICK0 CMP #2 BNE GOON7 JSR DOWN GOON7 LDA STICK0 CMP #4 BNE GOON8 JSR LINKS GOON8 Lv}DA STICK0 CMP #8 BNE ENDE JSR RECHTS JMP ENDLOS ENDE LDA ADRESS STA SCREEN LDA ADRESS+1 STA SCREEN+1 JSR OUTPUT RTv}S * * HOCHBEWEGUNG * UP CLC LDA ADRESS SBC #40 STA ADRESS LDA ADRESS+1 SBC #0 STA ADRESS+1 RTS * * RUNTERBEWEGUNG v}* DOWN CLC LDA ADRESS ADC #40 STA ADRESS BCC NOINC5 INC ADRESS+1 NOINC5 RTS * * RECHTSBEWEGUNG * RECHTS LDA SPANUM Cv}MP #38 BNE GOON1 RTS ;XPOSITION ZU GROSS * BYTEBEWEGUNG (8 BYTES NACH RECHTS) GOON1 LDY SPANUM LDX #0 RLOOP LDA (SCREv}EN),Y STA MASK,X INY LDA (SCREEN),Y STA MASK+1,X DEY CLC LDA SCREEN ADC #40 STA SCREEN BCC NOINC1 INC SCREEN+1 Nv}OINC1 INX INX CPX #16 BNE RLOOP * VERSCHIEBEN DER BYTES NACH RECHTS LDX #0 ROTLOOP LSR MASK,X ROR MASK+1,X INX INX v} CPX #16 BNE ROTLOOP INC MERKER LDA MERKER CMP #8 BNE GOON2 * MERKER=8 ALSO FLAG SETZEN * DAMIT NACH DER AUSGABE DIE Sv}PALTEN- * NUMMER ERHOET WIRD ! INC FLAG LDA #0 STA MERKER GOON2 RTS * * LINKSBEWEGUNG * LINKS LDA SPANUM CMP #0 BNEv} GOON3 RTS ;XPOSITION ZU GROSS * BYTEBEWEGUNG (8 BYTES NACH RECHTS) GOON3 LDY SPANUM LDX #0 LLOOP LDA (SCREEN),Y STA v}MASK,X INY LDA (SCREEN),Y STA MASK+1,X DEY CLC LDA SCREEN ADC #40 STA SCREEN BCC NOINC3 INC SCREEN+1 NOINC3 INX v }INX CPX #16 BNE LLOOP * VERSCHIEBEN DER BYTES NACH LINKS LDX #0 LEFTLOOP ASL MASK+1,X ROL MASK,X INX INX CPX #16 Bv!}NE LEFTLOOP DEC MERKER LDA MERKER BPL GOON4 * MERKER=8 ALSO FLAG SETZEN * DAMIT NACH DER AUSGABE DIE SPALTEN- * NUMMER Ev"}RHOET WIRD ! INC LFLAG LDA #7 STA MERKER GOON4 RTS * * RECHENROUTINE (YPOS*40)+SAVMSC * CALC LDA YPOS STA SCREEN LDAv#} #0 STA SCREEN+1 * ERST YPOS*4 ASL SCREEN ROL SCREEN+1 ASL SCREEN ROL SCREEN+1 * DANN SCREEN+YPOS=YPOS*5 CLC LDA Sv$}CREEN ADC YPOS STA SCREEN BCC NOINC2 INC SCREEN+1 * DANN DAS GANZE*8=YPOS*40 NOINC2 ASL SCREEN ROL SCREEN+1 ASL SCREEv%}N ROL SCREEN+1 ASL SCREEN ROL SCREEN+1 * NUN NOCH SAVMSC ADDIEREN CLC LDA SCREEN ADC SAVMSC STA SCREEN STA ADRESS v&}LDA SCREEN+1 ADC SAVMSC+1 STA SCREEN+1 STA ADRESS+1 RTS FERTIG... * * AUSGABE DER 16 BYTES * OUTPUT LDY SPANUM LDX #0v'} OLOOP LDA MASK,X STA (SCREEN),Y INY LDA MASK+1,X STA (SCREEN),Y DEY * SCREEN+40 CLC LDA SCREEN ADC #40 STA SCREEv(}N BCC NOINC4 INC SCREEN+1 NOINC4 INX INX CPX #16 BNE OLOOP * FLAG TESTEN LDA FLAG BEQ GOON5 DEC FLAG INC SPANUM v)}GOON5 LDA LFLAG BEQ ENDOUT DEC LFLAG DEC SPANUM ENDOUT RTS * * VARIABLEN UND SHAPEDATEN * DATES DFB $FF,$FF,$FF,$FF;SHAv*}PE DFB $FF,$FF,$FF,$FF;DATEN MASK DFW 0,0,0,0,0,0,0,0 ADRESS DFW 0 SPANUM DFB 37 MERKER DFB 0 FLAG DFB 0 LFLAG DFB 0 YPOS v+}DFB 10ANUM DFB 37 MERKER DFB 0 FLAG DFB 0 LFLAG DFB 0 YPOS tH************************************* * * FAST-PLOT-ROUTINE(GRAPHICS 14) * * (C) BY * * THE AMERICAN SOFTWARE SERVICE (ASS) *z-} ************************************* SAVMSC EQU $58 SCREEN EQU $D0 XPOS EQU $D6 YPOS EQU $D8 MASK EQU $D9 BITNUM EQU $DA Sz.}PALTE EQU $DB SDLSTL EQU $230 DLIST EQU $0600 VRAM EQU $54 LOTAB EQU $2000 HITAB EQU $20C0 ORG $A800 JSR SETLST LDA #50 z/} STA XPOS LDA #50 STA YPOS JSR PLOT RTS * * DISPLAYLIST AUFBAUEN UND TABELLE * SETLST LDA #$70 STA DLIST STA DLIST+1 z0} STA DLIST+2 LDA #$4C STA DLIST+3 LDA #$0 STA DLIST+4 LDA #VRAM STA DLIST+5 LDX #6 LDA #12 LOOP STA DLIST,X INX CPz1}X #195 BNE LOOP LDA #$41 STA DLIST+195 LDA #DLIST:L STA DLIST+196 LDA #DLIST:H STA DLIST+197 * ZEIGER AUF NEUE DISPLAz2}YLIST LDA #DLIST:L STA SDLSTL LDA #DLIST:H STA SDLSTL+1 * * TABELLE ANSETZEN * SETTAB LDX #0 LDA #0 STA LOTAB,X STAz3} HITAB,X INX TABLOOP CLC LDA LOTAB-1,X ADC #20 STA LOTAB,X LDA HITAB-1,X ADC #0 STA HITAB,X INX CPX #192 BNE TABLz4}OOP RTS * * BYTENUMMER * PLOT LDX YPOS LDA LOTAB,X STA SCREEN LDA HITAB,X ADC #VRAM STA SCREEN+1 LDA #0 STA BITNUz5}M CLC LSR XPOS+1 ROR XPOS ROR BITNUM LSR XPOS+1 ROR XPOS ROR BITNUM LSR XPOS+1 ROR XPOS ROR BITNUM LDA XPOS STA z6}SPALTE LSR BITNUM LSR BITNUM LSR BITNUM LSR BITNUM LSR BITNUM * BITMASK BERECHNEN LDA #$80 STA MASK LDA BITNUM Bz7}EQ ENDCALC LOOP1 LSR MASK DEC BITNUM BNE LOOP1 * * PUT (PUNKT SETZEN) * ENDCALC LDY SPALTE LDA (SCREEN),Y ORA MASK STz8}A (SCREEN),Y RTSUM BNE LOOP1 * * PUT (PUNKT SETZEN) * ENDCALC LDY SPALTE LDA (SCREEN),Y ORA MASK STx$************************************* * * GAME 1 * ************************************* PMBASE EQU $D407 SDMCTL EQU $22F GP~:}RIOR EQU $26F PCOLR0 EQU $2C0 HPOSP0 EQU $D000 GRACTL EQU $D01D STICK0 EQU $278 TRIG0 EQU $D010 COLOR0 EQU $2C4 VSCROL EQU $D~;}405 SETVBV EQU $E45C XITVBV EQU $E462 SDLISTL EQU $230 AUDCTL EQU $D208 SKCTL EQU $D20F AUDF1 EQU $D200 AUDC1 EQU $D201 PL~<}AYZ EQU $80 ZEIGER EQU $82 FUER ALLES ORG $A800 * * ERST DEN PLAYER INITIALISIEREN * LDA #4 GOLDENER STA COLOR0+4 HINTE~=}RGRUND LDA #0 STA COLOR0+1 LDA #42 STA SDMCTL LDA #%00000001 STA GPRIOR LDA #$50 STA PMBASE LDA #3 STA GRACTL P&M E~>}INSCH. LDA #11 STA PCOLR0 PM1=WEISS LDA #0 STA PCOLR0+1 ;SCHATTEN PM2 LDA XPOS STA HPOSP0 X-POS=70 STA HPOSP0+1 AUCH ~?}PLR.2 STA HPOSP0+2 AUCH PLR.3 * * PLAYER 1 UND 2 NACH UNTEN * LDA PM2 STA PLAYZ LDA PM2+1 STA PLAYZ+1 LDX #85 JSR SH~@}OW LDA PM1 STA PLAYZ LDA PM1+1 STA PLAYZ+1 LDX #85 JSR SHOW JMP GOON2 SHOW JSR DOWN DEX BNE SHOW RTS * * NEUE D~A}ISPLAYLIST * GOON2 LDA #DLIST:L ERST LSB STA SDLISTL FESTLEGEN LDA #DLIST:H DANN MSB STA SDLISTL+1 FESTLEGEN * * INTERRU~B}PT(STEUERUNG) EINBINDEN * LDA #7 DEFFERED LDX #PROGR:H LDY #PROGR:L JSR SETVBV AB INS OS * * HIER FOLGT DAS ~C} * JSR POKEY POKEY INIT MAIN LDA HIGH SCHON HOCH BEQ GOON3 GENUG JSR SOUND1 DANN SOUND GOON3 BNE GOON4 ZU TIEF ? JSR~D} OFF KEIN SOUND GOON4 LDA TRIG0 TRIGGER ? BNE GOON5 DANN SCHUSS JSR SHINI JSR SHOOT GOON5 JMP MAIN * * POKEYCHIP INIT~E}IALISIEREN * POKEY LDA #0 NULL IN STA AUDCTL AUDICONTROL LDA #3 DREI IN STA SKCTL SKCONTROL RTS ZURUECK * * MASCHIENE~F}NSOUND * SOUND1 LDA #194 AUDIOCTRL STA AUDC1 REGISTER1 LDA #200 FREQ=200 STA AUDF1 KANAL 1 RTS * * SOUNDS AUS * OFF ~G}LDA #0 VOLUME=0 STA AUDC1 KANAL 1 RTS AUS * * ZEIGER FUER DEN SCHUSSPLAYER * SHINI LDA PM3 PMADRESSE3 STA ZEIGER IN D~H}EN LDA PM3+1 ZEIGER STA ZEIGER+1 SCHREIBEN LDA XPOS HORIZONTALE STA HPOSP0+2 SCH.POS. RTS * * SCHIESSEN(SOUND) * SH~I}OOT LDA #14+32+128 STA AUDC1+2 KANAL2 LDY #170 Y=FREQ. LDX #$FF X=DAUER LOOPSH STY AUDF1+2 KANAL 2 DEX DAUER-1 BNE LO~J}OPSH SCHON 0? JSR SHBEW BEWEGUNG LDA #2 KLEINE STA COUNTH VERZOE- JSR PAUSE GERUNG INY FREQ.-1 BNE LOOPSH SCHON ~K}0? LDA #0 SOUND STA AUDC1+2 WIEDER AUS RTS CIAO * * BEWEGUNG DES SCHUSSES * SHBEW TYA FREQUENZ PHA AUF STACK DEC~L} ZEIGER YPOS-1 LDY #0 Y=0 LOOPB LDA CANON,Y ERSTES BYTE STA (ZEIGER),Y IN PMRAM INY NAECHSTES CPY #4 SCHON 3 ? BNE LO~M}OPB NEIN PLA FREQUENZ TAY VOM STACK RTS * * VERZOEGERUNGSSCHLEIFE * PAUSE DEC COUNTL ERST LSB BNE PAUSE ERNIEDRIGEN ~N} DEC COUNTH DANN MSB BNE PAUSE ERNIEDRIGEN RTS * * INTERRUPTPROGRAMM JOYSTICKABFRAGE * BEWEGUNG DES RAUMSCHIFFS USW. PRO~O}GR LDA STICK0 STICK NACH AND #1 VORN ? BNE JOY2 NEIN JSR FORWRD DOCH JOY2 LDA STICK0 STICK NACH AND #2 HINTEN BNE JOY~P}3 NEIN JSR BACK DOCH JOY3 LDA STICK0 AND #4 ;NACH LINKS BEWEGEN? BNE JOY4 ;WENN NICHT,WEITER JSR LEFT ;LINKS JOY4 LDA S~Q}TICK0 AND #8 ;NACH RECHTS ? BNE END ;NEIN,DANN SCHLUSS JSR RIGHT;DOCH RECHTS END LDA HIGH MAXIMALE CMP #3 HOEHE BNE E~R}ND1 NEIN JSR SCROLL ;WENN DOCH,SCROLL JSR COUNT ;PUNKTE ZAEHLEN END1 JMP XITVBV;RAUS AUS INTERRUPT * * PLAYER LEFT * ~S} LEFT LDA HIGH HOCH GENUG? CMP #3 WENN NICHT BNE ENDLE SCHLUSS LDA XPOS POSITION CMP #48 ERLAUBT ? BEQ ENDLE N E I N~T} DEC XPOS XPOS -1 LDA XPOS NEUE POSI- STA HPOSP0 TION STA HPOSP0+1 AUCH PLR.2 ENDLE RTS * * PLAYER RIGHT * RIGHT LDA ~U}HIGH HOCH GENUG CMP #3 WENN NICHT BNE ENDRI SCHLUSS LDA XPOS POSITION CMP #200 ERLAUBT ? BEQ ENDRI N E I N INC XPOS~V} XPOS +1 LDA XPOS NEUE POSI- STA HPOSP0 STA HPOSP0 TION STA HPOSP0+1 AUCH PLR.2 ENDRI RTS * * SPACESHIP FORWARD * FORW~W}RD LDA HIGH HOEHE SCHON CMP #3 ERREICHT? BCS END2 DANN ENDE INC HIGH HOEHER UND JSR UP PLAYER UP END2 RTS * * SPAC~X}ESHIP BACK * BACK LDA HIGH AM BODEN ? BEQ END3 DANN ENDE DEC HIGH TIEFER UND JSR DOWN PLAYER DOWN END3 RTS * * PLAYE~Y}R UP * UP LDA #0 LETZTE LDY #7 PLAYERZEILE STA (PLAYZ),Y LOESCHEN DEC PLAYZ ADRESSE-1 LDY #0 VON 0-7 JMP OUTPUT AUSG~Z}EBEN DOWN LDA #0 ERSTE LDY #0 PLAYERZEILE STA (PLAYZ),Y LOESCHEN INC PLAYZ ADRESSE+1 OUTPUT LDA SHIP,Y HOLE DATEN STA~[} (PLAYZ),Y IN PM-RAM INY NAECHSTES CPY #8 SCHON 8 ? BNE OUTPUT NEIN,GO ON RTS SCHLUSS * * ROUTINE ZUM VERTIKALEN SCRO~\}LLING * SCROLL DEC SVSCRL FINESCR-1 LDA SVSCRL INS STA VSCROL REGISTER BPL ENDS ;SCHON ALLE ZEILEN LDA #7 ZAEHLER NEU ~]} STA VSCROL FESTLEGEN STA SVSCRL BEI 7 SEC LDA DLIST+7 BILDRAM SBC #40 ADRESSE STA DLIST+7 ERHOEHEN LDA DLIST+8 EVENT~^}UELL SBC #0 AUCH DAS STA DLIST+8 MSB ENDS RTS * * PUNKTEZAEHLEN * COUNT LDX #16 ERSTE LDA SCORE,X STELLE CMP #25 SCH~_}ON 10? BNE ENDSC NEIN,ENDE LDA #15 DOCH,AUF STA SCORE,X NULL INC SCORE,X DEX LDA SCORE,X STELLE CMP #25 SCHON 10? ~`}BNE ENDSC NEIN,ENDE LDA #15 DOCH,AUF STA SCORE,X NULL INC SCORE,X DEX LDA SCORE,X STELLE CMP #25 SCHON 10? BNE ENDS~a}C NEIN,ENDE LDA #15 DOCH,AUF STA SCORE,X NULL INC SCORE,X DEX LDA SCORE,X STELLE CMP #25 SCHON 10? BNE ENDSC NEIN,E~b}NDE LDA #15 DOCH,AUF STA SCORE,X NULL INC SCORE,X DEX LDA SCORE,X STELLE CMP #25 SCHON 10? BNE ENDSC NEIN,ENDE LDA~c} #15 DOCH,AUF STA SCORE,X NULL INC SCORE,X DEX LDA SCORE,X STELLE CMP #25 SCHON 10? BNE ENDSC NEIN,ENDE LDA #15 DO~d}CH,AUF STA SCORE,X NULL ENDSC INC SCORE,X RTS ************************************* * VARIABLEN XPOS DFB 50 PM1 DFW $520~e}0 PM2 DFW $5200+128 PM3 DFW $5200+256+85 HIGH DFW 0 SVSCRL DFB 7 SHPOS DFB 85 COUNTL DFB 0 COUNTH DFB 0 * * PLAYERDATEN * SH~f}IP DFB %00011000 DFB %00011000 DFB %10011001 DFB %10011001 DFB %10111101 DFB %11111111 DFB %11000011 DFB %10000001 CA~g}NON DFB %10000001 DFB %10000001 DFB %10000001 DFB %00000000 * * NEUE DISPLAYLIST(GR.12 mit BIT 5) * DLIST DFB $70,$70,$70~h} DFB $47 DFW SCORE DFB $64 DFW $6000 DFB $24,$24,$24,$24,$24 DFB $24,$24,$24,$24,$24 DFB $24,$24,$24,$24,$24 DFB $24,~i}$24,$24,$24 DFB $4 DFB $41 DFW DLIST SCORE ASC % ź %~j} DFB $41 DFW DLIST SCORE ASC % ź %|************************************* * * DIESES PROGRAMM ERMOEGLICHT EIN * TEXTFENSTER IN DEN * DREI GTIA-MODES ! * l}************************************* SDLSTL EQU $230 NMIEN EQU $D40E VDSLST EQU $200 GPRIOR EQU $26F PRIOR EQU $D01B DINDEXm} EQU $57 WSYNC EQU $D40A ZEIGER EQU $D0 ORG $600 PLA PLA MODUS HOLEN PLA TAX CPX #3 BCC WEITER JMP END ZU GROSSn} WEITER LDA DINDEX CMP #8 BNE END NO GR.8 LDA GRATAB,X STA GMODE CLC ADC GPRIOR STA GPRIOR GTIA EIN STX MODE LDA o}DINDEX CLC ADC MODE ADC #1 GTIA STA DINDEX VORTAEUSCHEN * * NUN BIT 7 IN DER LETZTEN ZEILE SETZEN * LDA SDLSTL STA Zp}EIGER LDA SDLSTL+1 STA ZEIGER+1 LDY #$A7 LAST LINE LDA (ZEIGER),Y ORA #$80 SET BIT 7 STA (ZEIGER),Y * * INTERRUPT EIq}NBINDEN * LDA #0 INTERRUPT STA NMIEN AUS LDA #PROGR:L ADRESSE STA VDSLST LOW LDA #PROGR:H ADRESSE STA VDSLST+1 HIGH r} LDA #$C0 INTERRUPT STA NMIEN AN END RTS FERTIG ! MODE DFB 0 GTIA MODE GMODE DFB 0 * * INTERRUPTPROGRAMM * PROGR PHA s} AKKU RETTEN LDA GPRIOR EOR GMODE BITS AUS STA WSYNC STA PRIOR PLA AKKU HOLEN RTI GRATAB DFB $40,$80,$C0 FUER DIE t}* DREI * GTIA MODES EOR GMODE BITS AUS STA WSYNC STA PRIOR PLA AKKU HOLEN RTI GRATAB DFB $40,$80,$C0 FUER DIE ************************************* * * INVERTIEREN EINER TEILZEILE * ************************************* SAVMSC EQU $58v} SCREEN EQU $D0 ORG $600 PAGE 6 ! PLA N-PARAMETER PLA ZEILE VOM PLA STACK STA ZEILE PLA SPALTE1 VOM PLA STAw}CK STA SPALT1 PLA SPALTE2 VOM PLA STACK STA SPALT2 JSR CALC JSR INVERT RTS * * ERST DIE ZEILENPOSITION BERECHNENx} * * * 40*ZEILENNUMMER(SPEZIELL=>SCHNELL!) * CALC LDA ZEILE STA SCREEN LDA #0 STA SCREEN+1 ASL SCREEN ERST SCREEN ROL y}SCREEN+1 (ZEILE) ASL SCREEN MAL 4 ROL SCREEN+1 CLC LDA SCREEN DANN SCREEN ADC ZEILE PLUS ZEILE STA SCREEN (ZEILE*5) BCz}C NOADD1 INC SCREEN+1 NOADD1 ASL SCREEN ROL SCREEN+1 DAS GANZE ASL SCREEN MIT 8 ROL SCREEN+1 MULTIPLI- ASL SCREEN ZIEREN{} ROL SCREEN+1 (ZEILE*40)! * * NUN SAVMSC ADDIEREN * SAVADD CLC CLEAR CARRY LDA SCREEN ADC SAVMSC STA SCREEN LDA SCREE|}N+1 ADC SAVMSC+1 STA SCREEN+1 RTS READY ! * * NUN ERST INVERTIEREN * INVERT INC SPALT2 LDY SPALT1 SPALTE1 ILOOP LDA (S}}CREEN),Y GET CHAR EOR #128 REVERSE IT STA (SCREEN),Y PUT CHAR INY NXT CHAR CPY SPALT2 ALL DONE ? BNE ILOOP NO RTS YE~}S * * CONSTANTEN * SPALT1 DFB 0 SPALT2 DFB 0 ZEILE DFB 0}B 0 SPALT2 DFB 0 ZEILE DFB 0************************************* * * FORMATIEREN MIT DISKETTENNAMEN * ************************************* ICCOM EQU $}342 ICBADR EQU $344 ICAUX1 EQU $34A ICAUX2 EQU $34B ICBLEN EQU $348 CPTXTR EQU $9 CGTXTR EQU $5 CGBINR EQU $7 FORMAT EQU $FD} EOL EQU $9B CIOV EQU $E456 DUNIT EQU $301 DCOMND EQU $302 DBUFLO EQU $304 DBUFHI EQU $305 DAUX1 EQU $30A DAUX2 EQU $30B DS}KINV EQU $E453 DOSVEC EQU $A CHACT EQU $2F3 CH EQU $2FC ORG $A800 * * BEGRUESSUNG SCHREIBEN * ANFANG LDA #0 CURSOR STA }CHACT AUS ! LDX #TEXT1:L ERSTEN LDY #TEXT1:H TEXT JSR WRITE SCHREIBEN * * EINLESEN ALLER NOETIGEN DATEN * LDX #TEXT2:}L ZWEITEN LDY #TEXT2:H TEXT JSR WRITE SCHREIBEN LDX #FBYTE:L FORMAT LDY #FBYTE:H EINLESEN LDA #2 LAENGE JSR READ L}DA FBYTE SEC BERECHNUNG SBC #$30 DES FORMATS STA FBYTE LDA #2 CURSOR STA CHACT AN ! LDA FBYTE IST DIE CMP #3 ZAH}L<3 ? BCC GOON1 JA JMP ERR1 NEIN GOON1 LDX #TEXT3:L DRITTEN LDY #TEXT3:H TEXT JSR WRITE SCHREIBEN LDX #NAME:L FUER DE}N LDY #NAME:H NAMEN LDA #11 JSR READ EINLESEN JSR LOESCH LOESCHE EOL JSR INIT FORMATIEREN CPY #01 FEHLER ? BEQ GOO}N2 NEIN JMP ERR2 DOCH GOON2 JSR NAMER WRITE NAME CPY #01 FEHLER? BEQ ENDE NEIN JMP ERR2 DOCH * * ENDE-ROUTINE * ENDE} LDX #TEXT6:L SECHSTEN LDY #TEXT6:H TEXT JSR WRITE SCHREIBEN LDX #FBYTE:L ANTWORT LDY #FBYTE:H EINLESEN LDA #2 LAENGE }2 JSR READ LDA FBYTE CMP #'Y Y GEDRUECKT BNE AUS NEIN,ENDE JMP ANFANG Y GEDRUECKT AUS LDX #TEXT7:L SIEBTEN LDY #TEX}T7:H TEXT JSR WRITE SCHREIBEN TASTE LDA CH WARTEN,BIS CMP #$FF TASTE GE- BEQ TASTE DRUECKT IST JMP (DOSVEC) ZUM DOS *} * UNTERPROGRAMM FEHLERBEHANDLUNG * ERR1 LDX #TEXT4:L LDY #TEXT4:H JSR WRITE JMP ENDE * I/O-ERROR ERR2 LDX #TEXT5:L LD}Y #TEXT5:H JSR WRITE JMP ENDE * * UNTERPROGRAMM WRITE(IN GR.0) * WRITE STX ICBADR ADRESSE DER STY ICBADR+1 DATEN LDX #0} EDITOR LDA #40 STA ICBLEN AUSGEBEN LDA #0 STA ICBLEN+1 LDA #CPTXTR TEXT STA ICCOM AUSGEBEN JSR CIOV DO IT !!! }RTS * * UNTERPROGRAMM EINLESEN * READ STX ICBADR ADRESSE DER STY ICBADR+1 DATEN LDX #0 EDITOR STA ICBLEN EINLESEN LDA }#0 STA ICBLEN+1 LDA #CGTXTR TEXT STA ICCOM EINLESEN JSR CIOV DO IT !!! RTS * * ROUTINE ZUM LOESCHEN DER EOL-BYTES *} LOESCH LDX #$FF BEI 0 NEXT INX BEGINNEN LDA NAME,X ERSTES Z. CMP #EOL EIN EOL ? BNE NEXT NEIN LDA #' ' FALLS EOL S}TA NAME,X DURCH " " RTS ERSETZEN * * UNTERPROGRAMM FORMATIEREN * INIT LDA #1 KANAL 1 ASL ;MAL 16 ASL ASL ASL TAX I}N X LDA #0 STA ICAUX1,X HILFSREGIS- STA ICAUX2,X TER AUF 0 LDA #DISK:L STA ICBADR,X ZEIGER AUF LDA #DISK:H GERAETENAME } STA ICBADR+1,X CLC LDA #FORMAT FORMATIEREN ADC FBYTE GEW. FORMAT STA ICCOM,X JSR CIOV DO IT !!! RTS * * NUN DEN NA}MEN DIREKT IN SEK.361 * UEBER DSKINV PER SEKTORWRITE NAMER LDA #1 FLOPPY 1 STA DUNIT LDA #'W SEK.WRITE STA DCOMND LDA} #FLAG:L SEKTOR- STA DBUFLO ADRESSE IM LDA #FLAG:H SPEICHER STA DBUFHI FESTLEGEN LDA SEKTOR SEKTORNR. STA DAUX1 FESTLEGE}N LDA SEKTOR+1 STA DAUX2 JSR DSKINV DO IT !!! RTS THAT'S ALL FBYTE DFB 0,0 DISK ASC "D:" * DATEN FUER DEN ANZUSPR. }SEKTOR SEKTOR DFW 361 TEXT1 ASC "}**** MARIO'S DISKNAME FORMATTER ****" DFB EOL TEXT2 DFB 29,29;2 ZEILEN RUNTER ASC "Gib} ein : (0) 707 (1) 1010 Sektoren" DFB EOL TEXT3 DFB 29,29;2 ZEILEN RUNTER ASC "Geben Sie nun bitte den Namen ein !" DFB }EOL TEXT4 DFB 29,29;2 LEERZEILEN ASC "NUR DIE ZAHL 1 ODER 2 IST ERLAUBT !" DFB EOL TEXT5 DFB 29,29;2 LEERZEILEN ASC "I/O}-ERROR" DFB EOL TEXT6 DFB 29,29;2 LEERZEILEN ASC "Noch eine Diskette formatieren(Y/N)?" DFB EOL TEXT7 DFB 29,29;2 LEERZE}ILEN ASC "DOS-DISKETTE EINLEGEN UND !" DFB EOL * * BUFFER FUER DEN SEKTOR * FLAG DFB 2 COUNT DFW 0 STSEK DFW 0 NAM}E ASC " " DFB 2,0,0,0,0 ASC "-----------" DFB 2,0,0,0,0 ASC " "G DFB 2 COUNT DFW 0 STSEK DFW 0 NAMZ************************************ * * DLI-256-FARBEN * ************************************ SDLSTL EQU $230 VDSLST EQU $2}00 PRIOR EQU $D01B WSYNC EQU $D40A ZEIGER EQU $D0 NMIEN EQU $D40E GPRIOR EQU $26F ORG $600 PLA LDA GPRIOR STA MASK L}DA SDLSTL STA ZEIGER LDA SDLSTL+1 STA ZEIGER+1 LDY #3 LDA (ZEIGER),Y ORA #$80 SET BIT 7 STA (ZEIGER),Y LDY #6 LOOP}1 LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y INY CPY #100 BNE LOOP1 INY INY LOOP2 LDA (ZEIGER),Y ORA #$80 STA (ZEIGER),Y} INY CPY #197 BNE LOOP2 * * DLI EINBINDEN * LDA #0 STA NMIEN INTERR.AUS LDA #PROGR:L INTERRUPT STA VDSLST ADRESSE L}DA #PROGR:H EINBINDEN STA VDSLST+1 LDA #192 STA NMIEN AB GEHTS RTS * * HAUPTPROGRAMM * PROGR PHA ;RETTE AKKU LDA MA}SK EOR #128 BIT 7 (RE) STA MASK STA WSYNC SET STA PRIOR PLA AKKU HOLEN RTI CIAO !!! MASK DFB 0}RE) STA MASK STA WSYNC SET STA PRIOR PLA AKKU HOLEN RTI CIAO !!! MASK DFB 0************************************* * * ROULETT * * (C) BY * * THE AMERICAN SOFTWARE SERVICE (ASS) * **********************}*************** SDLSTL EQU $230 SETVBV EQU $E45C XITVBV EQU $E462 CH EQU $2FC RANDOM EQU $D20A CHBAS EQU $2F4 ZEIG1 EQU $80} ZEIG2 EQU $82 * P/M-GRAFIK PCOLR0 EQU $2C0 HPOSP0 EQU $D000 SIZEP0 EQU $D008 GPRIOR EQU $26F PMBASE EQU $D407 GRACTL EQU $}D01D SDMCTL EQU $22F PLAY0 EQU $5200 COLOR0 EQU $2C4 HSCROL EQU $D404 ORG $A800 * ZEICHENSATZ UMSCHALTEN LDA #$54 STA} CHBAS * PLAYER INITIALISIEREN LDA #1 STA SIZEP0 LDA #$78 STA HPOSP0 LDA #4 STA GPRIOR LDA #42 STA SDMCTL LDA #$50} STA PMBASE LDA #2 STA GRACTL * BITMUSTER SCHREIBEN LDX #$10 LDA #$FF LOOP0 STA PLAY0,X INX CPX #$1F BNE LOOP0 }* FARBREGISTER LDA #$36 STA COLOR0 LDA #$C6 STA COLOR0+1 LDA #$00 STA COLOR0+2 LDA #14 STA PCOLR0 LDA #10 STA COLO}R0+4 LDA #0 STA SPERR * * DISPLAYLIST (SETUP) * LDA #DLIST:L STA SDLSTL LDA #DLIST:H STA SDLSTL+1 INC DLIST+7 INC }DLIST+7 * * INTERRUPT (SETUP) * LDX #IPROGR:H LDY #IPROGR:L LDA #7 JSR SETVBV * * DREHPHASE(GESCHWINDIGKEIT USW...) }* DRLOOP LDA #4 STA NPIX1 JSR WAIT DEC NPIX1 JSR WAIT DEC NPIX1 JSR WAIT DEC NPIX1 JSR WAIT FULPOS LDA DRPOS POSIT}ION BNE FULPOS KORREKT ? FULSCR LDA SHSCRL VOLLSTDG. BNE FULSCR GESCROLLT? INC SPERR JSR GETTST DEC SPERR JMP DRLOOP } RTS * * INTERRUPTPROGRAMM * IPROGR LDA NPIX1 STA NPIX2 LDA SPERR BNE ENDRUPT ILOOP JSR DRIVE DEC NPIX2 BNE ILOOP E}NDRUPT JMP XITVBV DRIVE DEC SHSCRL LDA SHSCRL BPL ENDDR INC DLIST+7 INC DRPOS LDA DRPOS CMP #4 BNE GOON1 INC NUM } LDA NUM CMP #37 BNE GOON2 LDA #0 STA NUM LDA #2 STA DLIST+7 GOON2 LDA #0 STA DRPOS GOON1 LDA #7 STA SHSCRL ENDDR }LDA SHSCRL STA HSCROL RTS * * TASTE ERWARTEN * GETTST LDA #$FF STA CH TASTE LDA CH CMP #$FF BEQ TASTE RTS * * WARTE}SCHLEIFE * WAIT LDA RANDOM STA DELAY LDX #$FF LDY #$FF WLOOP DEY BNE WLOOP DEX BNE WLOOP DEC DELAY DEC DELAY DE}C DELAY BPL WLOOP RTS DELAY DFB 0 DLIST DFB $70,$70,$70 DFB $46 DFW PFEIL DFB $47+16 DFW ROULETT DFB $46 DFW PFE}IL DFB $46 DFW SCREEN DFB 6,6,6,6,6,6,6,6,6,6 DFB 6,6,6,6,6,6,6,6,6,6 DFB $41 DFW DLIST SHSCRL DFB 4 NUM DFB 0 DRPO}S DFB 0 SPERR DFB 0 NPIX1 DFB 0 NPIX2 DFB 0 ORG $2000 ROULETT ASC %-34-%,$-35-$,%-36-% DFB 77,80,80,77 ASC $-01-$,%-02-}%,$-03-$,%-04-%,$-05-$,%-06-%,$-07-$,%-08-% ASC $-09-$,%-10-% ASC $-11-$,%-12-%,$-13-$,%-14-%,$-15-$,%-16-%,$-17-$,%-18-%,$}-19-$ ASC %-20-%,$-21-$,%-22-%,$-23-$,%-24-%,$-25-$ ASC %-26-%,$-27-$,%-28-%,$-29-$,%-30-%,$-31-$,%-32-%,$-33-$,%-34-% ASC} $-35-$,%-36-% DFB 77,80,80,77 ASC $-01-$,%-02-% PFEIL ASC % ++ % SCREEN DFB 0} ++ % SCREEN DFB 0B************************************* * * SEKTOR-STATUS-READER * ************************************* DUNIT EQU $301 DCOMND} EQU $302 DBUFLO EQU $304 DBUFHI EQU $305 DAUX1 EQU $30A DAUX2 EQU $30B DVSTAT EQU $2EA DSKINV EQU $E453 SAVMSC EQU $58 CH E}QU $2FC SCREEN EQU $80 STRING EQU $82 ORG $A800 LDA #2 STA SPALTE LDA #0 STA ZEILE JSR POSIT LDA #GRUSS:L LDY #GR}USS:H LDX #34 JSR WRITE INC ZEILE INC ZEILE JSR POSIT LDA #COM1:L LDY #COM1:H LDX #28 JSR WRITE JSR GETRET INC }ZEILE JSR POSIT * BEGINN DES EINLESENS * VORBEREITUNGEN * POSITION DER UEBERSCHRIFT LDA #3 STA ZEILE LDA #4 STA SPAL}TE JSR POSIT LDA #HEADL:L LDY #HEADL:H LDX #33 JSR WRITE INC ZEILE JSR POSIT LDA #UNLINE:L LDY #UNLINE:H LDX #33 }JSR WRITE LDA #1 STA SEKNUM LDA #0 STA SEKNUM+1 MAINLOOP LDA #4 STA SPALTE LDA #5 STA ZEILE LOOP001 LDA SEKNUM+1 J}SR INTHEX LDA HEXBUF STA TEXT1+7 LDA HEXBUF+1 STA TEXT1+8 LDA SEKNUM JSR INTHEX LDA HEXBUF STA TEXT1+9 LDA HEXBUF+1} STA TEXT1+10 JSR GETSEK LDY #0 LDA #21 STA XPOS LOOP002 LDA DVSTAT,Y JSR INTHEX LDX XPOS LDA HEXBUF STA TEXT1,X} LDA HEXBUF+1 STA TEXT1+1,X INX INX INX STX XPOS INY CPY #3 BNE LOOP002 LDA SDSTATS JSR INTHEX LDA HEXBUF STA }TEXT1+30 LDA HEXBUF+1 STA TEXT1+31 * NUN DEN TEXT AUSGEBEN JSR POSIT LDA #TEXT1:L LDY #TEXT1:H LDX #32 JSR WRITE I}NC ZEILE LDA ZEILE CMP #23 BNE LOOP001 LDA #5 STA ZEILE JSR GETRET GOON3 JMP MAINLOOP * * UNTERPROGRAMM:INTEGER->HE}X * INTHEX STA NIBBLE+1 LDA #0 STA NIBBLE LDX #4 NIBROL1 LSR NIBBLE+1 ROR NIBBLE DEX BNE NIBROL1 LDX #4 NIBROL2 LS}R NIBBLE DEX BNE NIBROL2 LDA NIBBLE+1 TAX LDA HEXTAB,X STA HEXBUF LDA NIBBLE TAX LDA HEXTAB,X STA HEXBUF+1 RTS } * UNTERPROGRAMM:SEKTOR LESEN GETSEK LDA SEKNUM STA DAUX1 LDA SEKNUM+1 STA DAUX2 LDA #1 STA DUNIT LDA #BUFFER:L STA }DBUFLO LDA #BUFFER:H STA DBUFHI LDA #'R STA DCOMND JSR DSKINV STY SDSTATS LDA #'S STATUSREAD STA DCOMND JSR DSKINV} CLC INC SEKNUM BNE GOON1 INC SEKNUM+1 GOON1 RTS * * SCREEN-POINTER POSITIONIEREN * * * ERST DIE ZEILENPOSITION BE}RECHNEN * * * 40*ZEILENNUMMER(SPEZIELL=>SCHNELL!) * POSIT LDA ZEILE STA SCREEN LDA #0 STA SCREEN+1 ASL SCREEN ERST SCRE}EN ROL SCREEN+1 (ZEILE) ASL SCREEN MAL 4 ROL SCREEN+1 CLC LDA SCREEN DANN SCREEN ADC ZEILE PLUS ZEILE STA SCREEN (ZEIL}E*5) BCC NOADD1 INC SCREEN+1 NOADD1 ASL SCREEN ROL SCREEN+1 DAS GANZE ASL SCREEN MIT 8 ROL SCREEN+1 MULTIPLI- ASL SCRE}EN ZIEREN ROL SCREEN+1 (ZEILE*40)! * * NUN SAVMSC ADDIEREN * SAVADD CLC CLEAR CARRY LDA SCREEN ADC SAVMSC STA SCREEN }LDA SCREEN+1 ADC SAVMSC+1 STA SCREEN+1 * * NUN XPOSITION ADDIEREN * CLC LDA SCREEN ADC SPALTE STA SCREEN BCC NOINCSP } INC SCREEN+1 NOINCSP RTS READY ! * * TEXT AUSGEBEN(INTERNER CODE !!!) * WRITE STA STRING STY STRING+1 TXA BEQ GOONW } STX LENGTH LDX #0 GOONW LDY #0 WLOOP LDA (STRING),Y STA (SCREEN),Y NOINC1 INY CPY LENGTH BNE WLOOP RTS * * RETURNTA}STE WARTEN * GETRET LDA #$FF STA CH RELOOP LDA CH CMP #$0C BNE RELOOP RTS * * VARIABLEN * SPALTE DFB 0 ZEILE DFB 0 L}ENGTH DFB 0 FLAG DFB 0 SEKNUM DFW 0 XPOS DFB 0 SDSTATS DFB 0 HEXTAB ASC %0123456789ABCDEF% HEXBUF ASC %FF% NIBBLE DFW 0 GRU}SS ASC %Welcome to THE STATUS-READER V.1.0% COM1 ASC %Press RETURN to read STATUS % HEADL ASC %------ NUM. DVSTAT +0 +1 +2 }SIO% UNLINE ASC %---------------------------------% TEXT1 ASC %------ NNNN ------ NN NN NN NN% BUFFER DFB 0}NN NN NN NN% BUFFER DFB 0T************************************* * * SEKTOR-STATUS-READER * ************************************* DUNIT EQU $301 DCOMND} EQU $302 DBUFLO EQU $304 DBUFHI EQU $305 DAUX1 EQU $30A DAUX2 EQU $30B DVSTAT EQU $2EA DSKINV EQU $E453 SAVMSC EQU $58 CH E}QU $2FC SCREEN EQU $80 STRING EQU $82 ORG $A800 * VORBEREITUNGEN * POSITION DER UEBERSCHRIFT LDA #3 STA ZEILE LDA #4} STA SPALTE JSR POSIT LDA #HEADL:L LDY #HEADL:H LDX #34 JSR WRITE INC ZEILE JSR POSIT LDA #UNLINE:L LDY #UNLINE:}H LDX #34 JSR WRITE LDA #0 STA SEKNUM LDA #0 STA SEKNUM+1 * * BEGINN DER HAUPTSCHLEIFE * (TASTATURABFRAGE...) * * * }TASTE WARTEN * MAINLOOP LDA #$FF STA CH RELOOP LDA CH CMP #6 BNE GOONT1 JSR FORWARD JMP MAINLOOP GOONT1 CMP #7 BNE G}OONT2 JSR BACK JMP MAINLOOP GOONT2 CMP #13 BNE GOONT3 JSR INTERN JMP MAINLOOP GOONT3 CMP #63 BNE RELOOP JSR ASCII }JMP MAINLOOP * * SEKTOR-1 * BACK DEC SEKNUM BNE GOONW1 DEC SEKNUM+1 GOONW1 LDA SEKNUM LDY SEKNUM+1 JSR GETSEK JSR WRS}EK RTS * * SEKTOR+1 * FORWARD INC SEKNUM BNE GOONW0 INC SEKNUM+1 GOONW0 LDA SEKNUM LDY SEKNUM+1 JSR GETSEK JSR WRSEK} RTS * * ASCII-CODE EINSCHALTEN * ASCII LDA #1 STA ASCFLG JSR WRSEK LDA #31 STA SPALTE LDA #3 STA ZEILE JSR POSIT } LDA #ASCTXT:L LDY #ASCTXT:H LDX #7 JSR WRITE RTS ASCTXT ASC %ATASCII% * * INTERNEN MODUS EINSCHALTEN * INTERN LDA #0} STA ASCFLG JSR WRSEK LDA #31 STA SPALTE LDA #3 STA ZEILE JSR POSIT LDA #INTTXT:L LDY #INTTXT:H LDX #7 JSR WRITE} RTS INTTXT ASC %INTERN-% * * SEKTOR DARSTELLEN (HEX/INTERN/ASCII) * WRSEK LDA #4 STA SPALTE LDA #5 STA ZEILE LDA #}0 STA BUFPOS STA TEXPOS LDA #26 STA TEXPOS2 LOOP002 LDY BUFPOS LDA BUFFER,Y STA BYTE ;SAVE BYTE JSR INTHEX LDY TEX}POS LDA HEXBUF STA TEXT1,Y LDA HEXBUF+1 STA TEXT1+1,Y LDA ASCFLG BEQ NOCONV JSR ASCINT;CONVERT TO INTERN NOCONV LDA} BYTE LDY TEXPOS2 STA TEXT1,Y INC TEXPOS INC TEXPOS INC TEXPOS INC TEXPOS2 INC BUFPOS LDA TEXPOS CMP #24 BNE LOO}P002 * NUN DEN TEXT AUSGEBEN JSR POSIT LDA #TEXT1:L LDY #TEXT1:H LDX #34 JSR WRITE INC ZEILE LDA #0 STA TEXPOS L}DA #26 STA TEXPOS2 LDA ZEILE CMP #21 BNE LOOP002 RTS;SEKTOR IS ON SCREEN... * * UNTERPROGRAMM:INTEGER->HEX * INTHEX }STA HEXBUF+1 LDA #0 STA HEXBUF LDX #4 NIBROL1 LSR HEXBUF+1 ROR HEXBUF DEX BNE NIBROL1 LDX #4 NIBROL2 LSR HEXBUF DE}X BNE NIBROL2 LDA HEXBUF PHA ;SAVE BYTE LDA HEXBUF+1 TAX LDA HEXTAB,X STA HEXBUF PLA ;GET BACK TAX LDA HEXTAB,}X STA HEXBUF+1 RTS * * UNTERPROGRAMM ASCII->INTERN * ASCINT LDA BYTE BPL NOINV INC INVERS AND #%01111111 NOINV CMP }#$20 BCS CONV2 CLC ADC #$40 JMP ENDCONV CONV2 CMP #$60 BCS ENDCONV SEC SBC #$20 ENDCONV LDX INVERS BEQ BACK1 DEC} INVERS ORA #$80 BACK1 STA BYTE RTS * UNTERPROGRAMM:SEKTOR LESEN GETSEK STA DAUX1 STY DAUX2 LDA #1 STA DUNIT LDA #BU}FFER:L STA DBUFLO LDA #BUFFER:H STA DBUFHI LDA #'R STA DCOMND JSR DSKINV STY SDSTATS LDA #'S STATUSREAD STA DCOMND} JSR DSKINV RTS * * SCREEN-POINTER POSITIONIEREN * * * ERST DIE ZEILENPOSITION BERECHNEN * * * 40*ZEILENNUMMER(SPEZIEL}L=>SCHNELL!) * POSIT LDA ZEILE STA SCREEN LDA #0 STA SCREEN+1 ASL SCREEN ERST SCREEN ROL SCREEN+1 (ZEILE) ASL SCREEN M}AL 4 ROL SCREEN+1 CLC LDA SCREEN DANN SCREEN ADC ZEILE PLUS ZEILE STA SCREEN (ZEILE*5) BCC NOADD1 INC SCREEN+1 NOADD1} ASL SCREEN ROL SCREEN+1 DAS GANZE ASL SCREEN MIT 8 ROL SCREEN+1 MULTIPLI- ASL SCREEN ZIEREN ROL SCREEN+1 (ZEILE*40)! *} * NUN SAVMSC ADDIEREN * SAVADD CLC CLEAR CARRY LDA SCREEN ADC SAVMSC STA SCREEN LDA SCREEN+1 ADC SAVMSC+1 STA SCREEN}+1 * * NUN XPOSITION ADDIEREN * CLC LDA SCREEN ADC SPALTE STA SCREEN BCC NOINCSP INC SCREEN+1 NOINCSP RTS READY ! *} * TEXT AUSGEBEN(INTERNER CODE !!!) * WRITE STA STRING STY STRING+1 TXA BEQ GOONW STX LENGTH LDX #0 GOONW LDY #0 WLO}OP LDA (STRING),Y STA (SCREEN),Y NOINC1 INY CPY LENGTH BNE WLOOP RTS * * VARIABLEN * SPALTE DFB 0 ZEILE DFB 0 LENGTH D}FB 0 SEKNUM DFW 0 SDSTATS DFB 0 BUFPOS DFB 0 TEXPOS DFB 0 TEXPOS2 DFB 0;FOR ASCII & INTERN CODE BYTE DFB 0 ASCFLG DFB 1 INVE}RS DFB 0 HEXTAB ASC %0123456789ABCDEF% HEXBUF ASC %FF% HEADL ASC %--------HEXBYTES------- -INTERN-% UNLINE ASC %---------}-------------- --------% TEXT1 ASC %00 00 00 00 00 00 00 00 % BUFFER DFB 0;SEKTORBYTES...}i************************************* * * LOAD KOALA-PAINTER * ************************************* ICCOM EQU $342 ICBADR E}QU $344 ICBLEN EQU $348 ICAUX1 EQU $34A ICAUX2 EQU $34B CIOV EQU $E456 SAVMSC EQU $58 ZEIGER EQU $D0 COLOR0 EQU $2C4 ORG $}A800 JSR GETHEAD LDX #0 * SETCOLOR L1 LDA HEADBUF+13,X STA COLOR0,X INX CPX #5 BNE L1 JSR SETZEIG1 LDY #$0 L2 J}SR GBYTE BMI NORE JSR REPEAT JMP L2 NORE JSR UNIQUE JMP L2 * * REPEAT-DATAS * REPEAT STA COUNT L3 JSR GETBYTE STA (ZE}IGER),Y CLC LDA ZEIGER ADC #80 STA ZEIGER BCC NI1 INC ZEIGER+1 NI1 INC ZEILE LDA ZEILE CMP #96 BNE UG1 JSR SETZEI}G2 UG1 CMP #95 BNE G1 JSR SETZEIG1 G1 DEC COUNT BNE L3 RTS * * ZEIGER (GERADE) * SETZEIG1 LDA SCREEN STA ZEIGER LDA} SCREEN+1 STA ZEIGER+1 INY RTS * UND UNGERADE SETZEIG2 CLC LDA SCREEN ADC #$40 STA ZEIGER LDA SCREEN+1 ADC #0 STA }ZEIGER+1 RTS * * GET BYTE * GBYTE LDX CHANNEL LDA #0 STA ICBLEN,X LDA #0 STA ICBLEN+1,X LDA #7 GETCHAR STA ICCOM,X } JSR CIOV RTS * * GET HEADER(26 BYTES) * GETHEAD LDX #$10 STX CHANNEL LDA #HEADBUF:L STA ICBADR,X LDA #HEADBUF:H STA} ICBADR+1,X LDA #26 STA ICBLEN,X LDA #0 STA ICBLEN+1,X LDA #7 GETCHAR STA ICCOM,X JSR CIOV RTS HEADBUF ORG *+26 SC }REEN DFW 40000 CHANNEL DFB $10 }!************************************* * * LOAD KOALA-PAINTER * ************************************* ICCOM EQU $342 ICBADR E }QU $344 ICBLEN EQU $348 ICAUX1 EQU $34A ICAUX2 EQU $34B CIOV EQU $E456 SAVMSC EQU $58 ZEIGER EQU $D0 COLOR0 EQU $2C4 ORG $ }5000 PLA JUST FOR BASIC... * INITIALIZE LDA SAVMSC STA ZEIGER LDA SAVMSC+1 STA ZEIGER+1 LDA #0 STA SPALTE STA ZEIL}E STA NBYTES STA NBYTES+1 JSR GETHEAD * SETCOLOR LDX #0 L1 LDA HEADBUF+13,X STA COLOR0,X INX CPX #5 BNE L1 * * F}LAG(GLEICH ODER UNGLEICH)SETZEN * L2 LDA #0 STA FLAG STA COUNT+1 JSR GBYTE LDA BYTE BPL REP AND #$7F ;RESET BIT 7 S}TA BYTE LDA #1 STA FLAG REP JSR STORE * * PRUEFEN OB SCHON 7680 BYTES GELADEN * LDA #7680:L CMP NBYTES BNE L2 LDA #7}680:H CMP NBYTES+1 BNE L2 RTS * * DATAS IN SCREEN SCHREIBEN * STORE LDA BYTE BNE GO1 JSR GBYTE STA COUNT+1 JSR GB}YTE GO1 STA COUNT JSR GBYTE STA BYTE L3 LDA BYTE LDY SPALTE STA (ZEIGER),Y JSR PRLINE DEC COUNT BNE NOEND DEC CO}UNT+1 BMI END NOEND LDA FLAG BEQ L3 JSR GBYTE JMP L3 END RTS * * ZEILE PRUEFEN(OB 96 ODER 192) * PRLINE INC NBYTES B}NE GO2 INC NBYTES+1 GO2 INC ZEILE LDA ZEILE CMP #96 BNE NS1 CLC LDA SAVMSC ADC #40 STA ZEIGER LDA SAVMSC+1 ADC #0} STA ZEIGER+1 RTS NS1 LDA ZEILE CMP #192 BNE NS2 INC SPALTE LDA #0 STA ZEILE LDA SAVMSC STA ZEIGER LDA SAVMSC+1 } STA ZEIGER+1 RTS NS2 CLC LDA ZEIGER ADC #80 STA ZEIGER BCC NI1 INC ZEIGER+1 NI1 RTS * * GET BYTE * GBYTE LDX CHA}NNEL LDA #0 STA ICBLEN,X LDA #0 STA ICBLEN+1,X LDA #7 STA ICCOM,X JSR CIOV STA BYTE RTS * * GETHEAD * GETHEAD LD}X #$10 STX CHANNEL LDA #HEADBUF:L STA ICBADR,X LDA #HEADBUF:H STA ICBADR+1,X LDA #27 STA ICBLEN,X LDA #0 STA ICBLEN+}1,X LDA #7 GETCHAR STA ICCOM,X JSR CIOV RTS CHANNEL DFB $10 COUNT DFW 0 SPALTE DFB 0 ZEILE DFB 0 BYTE DFB 0 FLAG DFB 0} NBYTES DFW 0 * * HEADERBUFFER * HEADBUF DFB 0}00************************************* * * SEKTOR COPY PLUS V.2.0 * * IN NUR 3 DURCHGAENGEN * * SCHREIBEN OHNE UEBERPRUEFUNG(N}UR XL) * ************************************* DUNIT EQU $301 DCOMND EQU $302 DBUFLO EQU $304 DBUFHI EQU $305 DAUX1 EQU $30A} DAUX2 EQU $30B DDEVIC EQU $300 DSTATS EQU $303 DTIMLO EQU $306 DSTAT EQU $2EA DSKINV EQU $E453 SIOV EQU $E459 SDLISTL EQU }$230 CH EQU $2FC COLDST EQU $244 PORTB EQU $D301 COLPF0 EQU $D016 WSYNC EQU $D40A VCOUNT EQU $D40B BASICF EQU $3F8 NORMAL E }QU $21 ENHANCED EQU $22 ZEIGER EQU $80 ORG $0480,$5000 BOOTBLK DFB 0 DFB 8 DFW $480 DFW $486 TSX STX OLDST BEGIN LD!}X OLDST TXS LDA #1 STA WAUX1 ALTE WERTE STA RAUX1 WIEDER LDA #0 EINSTELLEN STA WAUX2 STA RAUX2 STA TEST LDA #1040:L"} STA MAXSEK STA CNTSEKR STA CNTSEKW LDA #1040:H STA CNTSEKR+1 STA CNTSEKW+1 STA MAXSEK+1 LDA #ENHANCED STA DENSITY #} LDA #DLIST:L NEUE STA SDLISTL DISPLAY- LDA #DLIST:H LIST STA SDLISTL+1 SETZEN GOON LDA #1 FLOPPY 1 STA DUNIT READ LDA$} #TEXT1:L TEXT 1 STA DLIST+4 LDA #TEXT1:H STA DLIST+5 JSR TASTE * * FALLS NOETIG DIE DICHTE FESTLEGEN * LDA TEST STEH%}T DIE BNE NOTEST JA,WEITER JSR DETEST NEIN,TESTEN * * HAUPTROUTINE (LESEN) * NOTEST LDA RAUX1 MIT RICHTI- STA DAUX1 GEM &}INHALT LDA RAUX2 FUELLEN STA DAUX2 LDA BUFFER BUFFER STA DBUFLO BEGINN LDA BUFFER+1 FESTLEGEN STA DBUFHI TAKESEK LDA '}#'R SEKTOR STA DCOMND LESEN JSR DSKINV DO IT BPL OKTAK JMP FEHLER OKTAK JSR CNTDWNR INC DAUX1 SEKTOR INC RAUX1 AUCH S(}CH. BNE GOON1 INC DAUX2 INC RAUX2 REGISTER GOON1 LDA MAXSEK+1 SCHON ALLE CMP DAUX2 SEKTOREN BNE HI1 GELESEN ? LDA MAX)}SEK DANN CMP DAUX1 DIE ROUTINE HI1 BCC WRITE BEENDEN * ANSONSTEN WIRD DER BUFFER ERHOET CLC LDA DBUFLO ADC #128 STA DB*}UFLO BNE TAKESEK INC DBUFHI LDA DBUFHI CMP BUFHI+1 BNE TAKESEK * * ROUTINE ZUM SCHREIBEN DER SEKTORTEN * WRITE LDA #+}TEXT2:L TEXT 2 STA DLIST+4 SCHREIBEN LDA #TEXT2:H STA DLIST+5 JSR TASTE * * EVENTUELL DIE DISKETTE FORMATIEREN * LDA TE,}ST SCHON CMP #1 FORMARIERT? BEQ NOINI JA,WEITER JSR FORMAT FORMATIEREN * * HAUPTROUTINE (SCHREIBEN) * NOINI LDA WAUX1 -}MIT RICHTI- STA DAUX1 GEM INHALT LDA WAUX2 FUELLEN STA DAUX2 LDA BUFFER BUFFER STA DBUFLO BEGINN LDA BUFFER+1 FESTLEGE.}N STA DBUFHI * * UEBERPRUEFEN OB DER SEKTOR LEER IST * PUTSEK LDY #0 LDA DBUFLO ZEIGER AUF STA ZEIGER BUFFER LDA DBUFHI /}RICHTEN STA ZEIGER+1 PRLOOP LDA (ZEIGER),Y BNE PUT NICHT LEER INY NEXT BYTE CPY #128 BNE PRLOOP JMP OKPUT SEKTOR LEE0}R * BEI LEEREN SEKTOREN NICHT SCHREIBEN PUT LDA #'P SEKTOR STA DCOMND SCHREIBEN JSR DSKINV DO IT BPL OKPUT JMP FEHLER1} OKPUT JSR CNTDWNW INC DAUX1 SEKTOR INC WAUX1 AUCH SREG BNE GOON2 INC DAUX2 MSB INC WAUX2 GOON2 LDA MAXSEK+1 SCHON ALL2}E CMP DAUX2 SEKTOREN BNE HI2 GELESEN ? LDA MAXSEK DANN CMP DAUX1 DIE ROUTINE HI2 BCS NOEND BEENDEN JMP ENDE * ANSONSTE3}N WIRD DER BUFFER ERHOET NOEND CLC LDA DBUFLO ADC #128 STA DBUFLO BNE PUTSEK INC DBUFHI LDA DBUFHI CMP BUFHI+1 BNE 4}PUTSEK JMP READ * * UNTERPROGRAMM DENSITY-TEST * DETEST LDA #1 DOPPELTE STA DAUX1 DICHTE LDA #0 ANTESTEN STA DAUX2 5}LDA #'R LESEN STA DCOMND FESTLEGEN JSR DSKINV DO IT ! LDA #'S STA DCOMND JSR DSKINV LDA DSTAT STATUS AND #$80 DENS6}ITY BNE ENDIN BEI MEDIUM * SINGLE-DENSITY-CASE LDA #720:L STA MAXSEK STA CNTSEKR STA CNTSEKW LDA #720:H STA MAXSEK+17} STA CNTSEKR+1 STA CNTSEKW+1 LDA #NORMAL STA DENSITY ENDIN INC CNTSEKR INC CNTSEKW JSR CNTDWNR JSR CNTDWNW RTS * * 8}UNTERPROGRAMM (FORMATIEREN SIOV) * FORMAT LDA DENSITY BEFEHL IST STA DCOMND FORMATIEREN LDA #$31 FLOPPY STA DDEVIC LDA 9}#0 STATUS 0 STA DSTATS LDA #$A0 TIMEOUT STA DTIMLO 160 LDA #0 STA DTIMLO+1 JSR SIOV DO IT !! BMI FEHLER OKFOR LDA:} #1 STA TEST RTS * * UNTERPROGRAMM TASTE(RETURN) * TASTE LDA #$FF STA CH TLOOP LDA VCOUNT CMP #20 BCS GOONTA1 CLC ;}ADC 20 STA WSYNC STA COLPF0 JMP GOONTA2 GOONTA1 LDA 708 STA COLPF0 GOONTA2 LDA CH CMP #$0C BNE TLOOP RTS * * FEHLER<}MELDUNG * FEHLER LDA DSTATS JSR INTHEX LDA HEXBUF STA TEXT5+15 LDA HEXBUF+1 STA TEXT5+16 LDA #TEXT5:L STA DLIST+4 L=}DA #TEXT5:H STA DLIST+5 JSR TASTE * * ENDE * ENDE LDA #TEXT3:L ;LETZTEN TEXT STA DLIST+4 ;SCHREIBEN LDA #TEXT3:H STA >}DLIST+5 JSR TASTE ;TASTE ? JMP BEGIN * * COUNTDOWNROUTINEN * * LESEN CNTDWNR DEC CNTSEKR LDA CNTSEKR CMP #$FF BNE?} GOONC1 DEC CNTSEKR+1 GOONC1 LDA CNTSEKR JSR INTHEX LDA HEXBUF STA TREAD+13 LDA HEXBUF+1 STA TREAD+14 LDA CNTSEKR+1 @}JSR INTHEX LDA HEXBUF STA TREAD+11 LDA HEXBUF+1 STA TREAD+12 RTS * SCHREIBEN CNTDWNW DEC CNTSEKW LDA CNTSEKW CMP #$FA}F BNE GOONC2 DEC CNTSEKW+1 GOONC2 LDA CNTSEKW JSR INTHEX LDA HEXBUF STA TWRITE+13 LDA HEXBUF+1 STA TWRITE+14 LDA CNTB}SEKW+1 JSR INTHEX LDA HEXBUF STA TWRITE+11 LDA HEXBUF+1 STA TWRITE+12 RTS * * UMWANDLUNG:INTERN->HEX * INTHEX STA HEXC}ZAHL+1 LDA #0 STA HEXZAHL LDX #4 IHLOOP LSR HEXZAHL+1 ROR HEXZAHL DEX BNE IHLOOP LSR HEXZAHL LSR HEXZAHL LSR HEXZD}AHL LSR HEXZAHL LDX HEXZAHL LDA HEXTAB,X STA HEXBUF+1 LDX HEXZAHL+1 LDA HEXTAB,X STA HEXBUF RTS HEXZAHL DFW 0 HEXTE}AB ASC %0123456789ABCDEF% HEXBUF ASC %FF% * * KONSTANTEN UND VARIABLEN * BUFFER DFW $0A00 BUFHI DFW $C000 WAUX1 DFB 1 WAUX2F} DFB 0 RAUX1 DFB 1 RAUX2 DFB 0 MAXSEK DFW 1040 OLDST DFB 0 TEST DFB 0 DENSITY DFB ENHANCED CNTSEKR DFW 0 CNTSEKW DFW 0 DLISG}T DFB $70,$70,$70 DFB $46 DFW TEXT1 DFB $70,$70,$70,$70,$70,$70 DFB $70 DFB $46 DFW TREAD DFB $70,$70,$70 DFB $46 DFH}W TWRITE DFB $70,$70,$70 DFB $41 DFW DLIST TEXT1 ASC % SOURCE DISK % TEXT2 ASC % DESTINATION DISK % TEXT3 ASC % I} RESET ODER RETURN % TEXT4 ASC %NEED 48K PRESS RESET% TEXT5 ASC % I/O - ERROR - 00 % TREAD ASC % READ : 0000 % TWRITJ}E ASC % WRITE: 0000 %K}ITE: 0000 % ************************************* * * LOAD/SAVE MICROPAINTER * ************************************* ICCOM EQU $342 ICBAM}DR EQU $344 ICBLEN EQU $348 CIOV EQU $E456 SAVMSC EQU $58 ORG $5000 PLA ;N PARAMETER LDX #$10 ;KANAL 1 PLA BEQ OUTPN}UT LDA #7 STA COMAND JMP INOUT OUTPUT LDA #11 STA COMAND INOUT LDA COMAND STA ICCOM,X LDA SAVMSC STA ICBADR,X LDA O}SAVMSC+1 STA ICBADR+1,X LDA #7680:L STA ICBLEN,X LDA #7680:H STA ICBLEN,X JSR CIOV JSR GBYTE STA 712 LDX #0 L4 P}JSR GBYTE STA 708,X INX CPX #4 BNE L4 RTS GBYTE LDA #0 STA ICBLEN,X STA ICBLEN+1,X LDA COMAND STA ICCOM,X JSR CIOQ}V RTS COMAND DFB 5R} 5************************************* * * 8-BIT-DIVISION * * DIVIDENT/DIVISOR * * FUNKTIONIERT WIE NORMALE * DIVISION,WIE MANT} SIE IN DER * SCHULE GELERNT HAT!!! * ************************************* ORG $A800 LDA #128 STA DIVIDENT LDA #3 STAU} DIVISOR LDA #0 LDX #8 L1 ASL DIVIDENT ROL CMP DIVISOR BCC NOSUB SBC DIVISOR INC DIVIDENT NOSUB DEX BNE L1 LDX V}DIVIDENT BRK THAT'S ALL FOLKS... DIVIDENT DFB 0 ;ZAEHLER+ERGEBNIS DIVISOR DFB 0W}K THAT'S ALL FOLKS... DIVIDENT DFB 0 ;ZAEHLER+ERGEBNIS DIVISOR DFB 0 ************************************* * * PICTURE-CONVERTER-DISPLAYLIST * ************************************* SDLSTL EQU $Y}230 SAVMSC EQU $58 ORG $A800 LDA #DLIST:L STA SDLSTL LDA #DLIST:H STA SDLSTL+1 LDA SAVMSC STA DLIST+3 LDA SAVMSC+1Z} STA DLIST+4 RTS DLIST DFB $70,$70,$42 DFW 40000;SAVMSC GOES HERE DFB $4E DFW 20480 DFB 14,14,14,14,14,14,14 DFB 14[},14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14\},14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14]},14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB $4E DFW 20480+4096 DFB 14,14,14,14,14,14,14 DFB 14,14,1^}4,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,1_}4,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 `}DFB 14,14,14,14,14,14,14,14 DFB 14,14,14,14,14,14,14,14 DFB $41 DFW DLISTa} DFB 14,14,14,14,14,14,14,14 DFB $41 DFW DLIST************************************* * * SEKTOR-STATUS-READER * ************************************* DDEVIC EQU $300 DUNITc} EQU $301 DCOMND EQU $302 DSTATS EQU $303 DBUFLO EQU $304 DBUFHI EQU $305 DTIMLO EQU $306 DBYTLO EQU $308 DBYTHI EQU $309 DAUd}X1 EQU $30A DAUX2 EQU $30B SIOV EQU $E459 ORG $A800 LDA SEKNUM LDY SEKNUM+1 LDX #10 JSR GETSEK RTS * * READ SEKTOe}R(DD) * GETSEK STA DAUX1 STY DAUX2 STX COUNT RLOOP LDA #$31 STA DDEVIC LDA #1 STA DUNIT LDA #'R STA DCOMND LDA #$40f} STA DSTATS LDA BUFFER STA DBUFLO LDA BUFFER+1 STA DBUFHI LDA #7 STA DTIMLO LDA #0 STA DBYTLO LDA #1 STA DBYTHI g}JSR SIOV DEC COUNT BEQ END INC BUFFER+1 INC DAUX1 BNE RLOOP INC DAUX2 JMP RLOOP END RTS COUNT DFB 0 BUFFER DFW $500h}0 SEKNUM DFW 360T BEQ END INC BUFFER+1 INC DAUX1 BNE RLOOP INC DAUX2 JMP RLOOP END RTS COUNT DFB 0 BUFFER DFW $500************************************* * * PUT A RECORD * ************************************* ICCOM EQU $342 ICBADR EQU $34j}4 ICBLEN EQU $348 ICAUX1 EQU $34A ICAUX2 EQU $34B CIOV EQU $E456 ORG $A800 * FIRST OPEN IOCB LDX #$10 LDA #FILE:L STAk} ICBADR,X LDA #FILE:H STA ICBADR+1,X LDA #8 STA ICAUX1,X LDA #0 STA ICAUX1+1,X LDA #3 STA ICCOM JSR CIOV * PUT Bl}YTES LDX #$10 LDA ADR STA ICBADR,X LDA ADR+1 STA ICBADR+1,X LDA LENGTH STA ICBLEN,X LDA LENGTH+1 STA ICBLEN+1,X m} LDA #9 STA ICCOM JSR CIOV * THEN CLOSE IT LDX #$10 LDA #12 STA ICCOM,X JSR CIOV RTS ADR DFW 6400 LENGTH DFW 500n}0 FILE ASC "D:PICLOAD.COM"o}OAD.COM"************************************* * * SEKTOR-STATUS-READER * ************************************* DDEVIC EQU $300 DUNITq} EQU $301 DCOMND EQU $302 DSTATS EQU $303 DBUFLO EQU $304 DBUFHI EQU $305 DTIMLO EQU $306 DBYTLO EQU $308 DBYTHI EQU $309 DAUr}X1 EQU $30A DAUX2 EQU $30B SIOV EQU $E459 ORG $A800 LDA SEKNUM LDY SEKNUM+1 LDX #10 JSR GETSEK RTS * * READ SEKTOs}R(DD) * GETSEK STA DAUX1 STY DAUX2 STX COUNT RLOOP LDA #$31 STA DDEVIC LDA #1 STA DUNIT LDA #'R STA DCOMND LDA #$40t} STA DSTATS LDA BUFFER STA DBUFLO LDA BUFFER+1 STA DBUFHI LDA #7 STA DTIMLO LDA #0 STA DBYTLO LDA #1 STA DBYTHI u}JSR SIOV DEC COUNT BEQ END INC BUFFER+1 INC DAUX1 BNE RLOOP INC DAUX2 JMP RLOOP END RTS COUNT DFB 0 BUFFER DFW $640}