This page (revision-7) was last changed on 03-Feb-2023 15:21 by Carsten Strotmann 

This page was created on 27-Dec-2010 17:44 by Carsten Strotmann

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
7 03-Feb-2023 15:21 41 KB Carsten Strotmann to previous
6 27-Dec-2010 17:51 41 KB Carsten Strotmann to previous | to last
5 27-Dec-2010 17:50 32 KB Carsten Strotmann to previous | to last
4 27-Dec-2010 17:49 32 KB Carsten Strotmann to previous | to last
3 27-Dec-2010 17:48 32 KB Carsten Strotmann to previous | to last
2 27-Dec-2010 17:46 21 KB Carsten Strotmann to previous | to last
1 27-Dec-2010 17:44 21 KB Carsten Strotmann to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 3 added 7 lines
[{TableOfContents }]
[{Image src='atari000.png' }]
!!Disk Image
* [Sector Copy/biboasm2.atr]
At line 789 added 742 lines
!!COPY2.ASM
{{{
00010 ------------------------------
00020 ** COPY2 **
00030 ------------------------------
00040 ;
00050 ; LAUFWERKS-DENSITY EINSTELLEN
00060 ; MEDIUM MUSS BEI AUTO-FORMAT
00070 ; GESETZT WERDEN.
00080 ;
00090 SETDEN LDA DENS
00100 BEQ .2
00110 BPL .1
00120 LDX #SETMD MEDIUM
00130 LDY /SETMD
00140 BNE .3
00150 .1 LDX #SETDD DOUBLE
00160 LDY /SETDD
00170 BNE .3
00180 .2 LDX #SETSD SINGLE
00190 LDY /SETSD
00200 .3 STX DBUFLO
00210 STY DBUFHI
00220 LDA #$4F COMMAND 4F
00230 STA DCOMND
00240 LDA #$C 12 BYTES
00250 STA DBYTLO
00260 LDA #$80 SENDEN
00270 STA DSTATS
00280 LDY DESTN DRIVE
00290 JMP MOVSLO SIO...
00300 ------------------------------
00310 ;
00320 ; FORMAT-VERIFY EIN- ODER
00330 ; AUSSCHALTEN
00340 ;
00350 SETVER LDA #$10
00360 BCS .1
00370 ORA #$20 SEKTOR LOW
00380 .1 STA DSECLO
00390 LDA #0
00400 STA DSTATS STATUS
00410 LDA #$44 COMMAND 44
00420 STA DCOMND
00430 LDY DESTN DRIVE
00440 JMP MOVSLO SIO...
00450 ------------------------------
00460 ;
00470 ; KOPIEREN BEENDET
00480 ;
00490 DONE LDY #120
00500 LDX #0 DISPLAY
00510 .1 LDA DISPLY,Y RETTEN
00520 STA DSBUF,X
00530 INX
00540 INY
00550 CPY #200
00560 BNE .1
00570 LDA CFIRST ANZ.
00580 STA RAMDSK DURCHG.
00590 ;
00600 ; ENDE-SOUND
00610 ;
00620 LDA #0
00630 STA $D208 AUDCTL
00640 LDY #$EF
00650 .2 STY $D201 AUDC1
00660 STY BYT1
00670 JSR LLL
00680 LDY BYT1
00690 DEY
00700 CPY #$DF
00710 BNE .2
00720 JMP STA2 NEUSTART
00730 ;
00740 LLL LDX #$8
00750 .1 STX $D200 AUDF1
00760 LDY #$0
00770 .2 DEY
00780 BNE .2
00790 INX
00800 CPX #$50
00810 BNE .1
00820 RTS
00830 ------------------------------
00840 ;
00850 ; DATENLAENGE SETZEN
00860 ; SEKTORNUMMER AUSGEBEN
00870 ;
00880 SETLEN LDA #$80
00890 STA DBYTLO $80 BYTES
00900 LDA #0
00910 STA DBYTHI
00920 LDY #30
00930 LDA DSECHI
00940 JSR HXOUT SEKTOR HI
00950 LDA DSECLO
00960 JSR HEXOUT SEKTOR LO
00970 LDA DENS
00980 CMP #$20 DOUBLE ?
00990 BNE .2
01000 LDA DSECHI
01010 BNE .1
01020 LDA DSECLO
01030 CMP #4 SEKTOR <4
01040 BCC .2
01050 .1 ASL DBYTLO $100 BYTES
01060 ROL DBYTHI
01070 .2 RTS
01080 ------------------------------
01090 ;
01100 ; SIO-AUFRUFEN / 2 VERSUCHE
01110 ;
01120 MASTER LDA #2 2 VERSUCHE
01130 STA BYT1
01140 LDA DSTATS STATUS
01150 STA BYT1+1 MERKEN
01160 .1 JSR US
01170 BPL .2 KEIN ERROR
01180 LDA BYT1+1 STATUS
01190 STA DSTATS ZURUECK
01200 DEC BYT1 LETZTER
01210 BNE .1 VERSUCH?
01220 STY DSTATS
01230 SEC
01240 RTS FEHLER
01250 .2 CLC
01260 RTS KEIN FEHLER
01270 ------------------------------
01280 ;
01290 ; KOMMANDO IN NORMALER UEBER-
01300 ; TRAGUNGSRATE SENDEN
01310 ;
01320 MOVSLO STY DUNIT
01330 LDA SPTBL-1,Y
01340 PHA
01350 LDA #$28
01360 STA SPTBL-1,Y
01370 JSR MASTER
01380 LDX DUNIT
01390 PLA
01400 STA SPTBL-1,X
01410 RTS
01420 ------------------------------
01430 ENDCHK BIT DENS MEDIUM?
01440 BPL .1
01450 LDA RSECA
01460 CMP #$10
01470 BNE .2 SEKTOR
01480 LDA RSECA+1 $410
01490 CMP #4 ERREICHT?
01500 BNE .2
01510 SEC
01520 RTS
01530 .1 LDA RSECA SEKTOR
01540 CMP #$D0 $2D0
01550 BNE .2 ERREICHT?
01560 LDA RSECA+1
01570 CMP #2
01580 BNE .2
01590 SEC
01600 RTS
01610 .2 INC RSECA SEKTOR+1
01620 BNE .3
01630 INC RSECA+1
01640 .3 LDA DBUFLO BUFFER
01650 CLC +LAENGE=
01660 ADC DBYTLO BUFFER
01670 STA DBUFLO
01680 LDA DBUFHI
01690 ADC DBYTHI
01700 STA DBUFHI
01710 BIT BANKS DATEN IN
01720 BMI SAVBNK RAMDISK?
01730 TAY
01740 INY $F000?
01750 CPY #$F1
01760 BEQ .6
01770 CPY #$D1 $D000?
01780 BEQ .5
01790 CPY HIMEM MEMTOP?
01800 BNE .4
01810 LDA #$C0 BUFFER=
01820 STA DBUFHI $C000
01830 LDA #0
01840 STA DBUFLO
01850 .4 CLC
01860 BCC ENDC3
01870 .5 LDA #0 BUFFER=
01880 STA DBUFLO $D800
01890 LDA #$D8
01900 STA DBUFHI
01910 CLC
01920 BCC ENDC3
01930 ;
01940 .6 LDA MAXBANK ENDE
01950 BNE SWBANK RAMDISK?
01960 ENDRAM SEC
01970 ENDC3 LDA #$FF
01980 RTS
01990 ------------------------------
02000 ;
02010 ; BANK EINSCHALTEN/BUFFER=$4000
02020 ;
02030 SWBANK LDY #$FF
02040 STY BANKS
02050 INY
02060 STY BANKNR
02070 SWB0 LDA PORTB
02080 AND #$23
02090 ORA BANKTB,Y
02100 STA PORTB
02110 LDA #0 BUFFER=
02120 STA DBUFLO $4000
02130 LDA #$40
02140 STA DBUFHI
02150 CLC
02160 BCC ENDC3
02170 ------------------------------
02180 SAVBNK CMP #$80 ENDE
02190 BCC ENDC3 RAMBANK?
02200 INC BANKNR BANK+1
02210 LDY BANKNR
02220 CPY MAXBANK ENDE
02230 BEQ ENDRAM RAMDISK?
02240 BNE SWB0
02250 ------------------------------
02260 ;
02270 ; DISKBUFFER AUF LOMEM SETZEN
02280 ; RAMBANKS ABSCHALTEN
02290 ;
02300 SETBUF LDA #LOMEM
02310 STA DBUFLO
02320 LDA /LOMEM
02330 STA DBUFHI
02340 LDA #0
02350 STA BANKS
02360 LDA PORTB CPU
02370 ORA #$10 ZUGRIFF
02380 STA PORTB AUS
02390 RTS
02400 ------------------------------
02410 ;
02420 ; FEHLERMELDUNG UND FEHLERNUM-
02430 ; MER AUSGEBEN/AUF TASTE WARTEN
02440 ;
02450 ERROR LDX #DSKERR "FEHLER.."
02460 STX RWLINE
02470 LDY #15 POS.15
02480 LDA DSTATS NUMMER
02490 JSR HEXOUT
02500 LDA #$80
02510 JSR HITRET TASTE ?
02520 BEQ .1
02530 SEC
02540 RTS
02550 .1 CLC
02560 RTS
02570 ------------------------------
02580 ;
02590 ; HEXZAHL IM ACCU UMWANDELN
02600 ; UND IN TEXTZEILE EINSETZEN
02610 ;
02620 HEXOUT PHA HIGH
02630 LSR NIBBLE
02640 LSR
02650 LSR
02660 LSR
02670 JSR HXOUT
02680 PLA LOW
02690 AND #$F NIBBLE
02700 HXOUT CMP #$A
02710 BCC .1
02720 ADC #6
02730 .1 ADC #$D0
02740 STA DSKERR,Y
02750 INY
02760 RTS
02770 ------------------------------
02780 ;
02790 ; BALKENPOSITION AKTUALISIEREN
02800 ;
02810 DFUEL STY FBYT
02820 TAY
02830 INY EIN SCHRITT
02840 CPY FINC WEITER?
02850 BCC .2
02860 LDY FBYT
02870 INY
02880 CPY #4
02890 BCC .1
02900 INX
02910 LDY #0
02920 .1 LDA FTAB,Y ZEICHEN
02930 STA DISPLY,X SETZEN
02940 LDA #0
02950 RTS
02960 .2 TYA
02970 LDY FBYT
02980 RTS
02990 ------------------------------
03000 ;
03010 ; BALKEN SETZT SICH AUS GRAFIK-
03020 ; ZEICHEN ZUSAMMEN " \^V \^Y \M^B \240 "
03030 ;
03040 FTAB .HX 5659C280
03050 ;
03060 ;
03070 ;
03080 COLTB .HX FA8A10CA10
03090 ;
03100 ; TEXTE DER SPEICHERGROESSE
03110 ; 16K / 8K / OHNE CARTRIDGE
03120 ;
03130 MEMTB .AT "40k 48k 56k " 64K
03140 .AT "104k112k120k" 128K
03150 .AT "168k176k184k" 192K
03160 .AT "296k304k312k" 320K
03170 ------------------------------
03180 ;
03190 ; LAUFWERK KONFIGURATIONSDATEN
03200 ; SINGLE/DOUBLE/MEDIUM-DENSITY
03210 ;
03220 SETSD .HX 2800001200000080
03230 .HX FF000000
03240 SETDD .HX 2800001200040100
03250 .HX FF000000
03260 SETMD .HX 2800001A00040080
03270 .HX FF000000
03280 ------------------------------
03290 ;
03300 ; TESTEN OB ALLE BYTES IM
03310 ; BUFFER NULL SIND
03320 ;
03330 EMPTY LDA FORMT FORMATFLG
03340 BNE EMP2
03350 LDA DBUFLO ADRESSE
03360 STA EMPVEC+1
03370 LDA DBUFHI
03380 STA EMPVEC+2
03390 LDY #0
03400 EMPVEC LDA $AAAA,Y
03410 BNE EMP2
03420 INY
03430 CPY DBYTLO ALLE BYTES
03440 BNE EMPVEC GETESTET?
03450 SEC
03460 RTS
03470 EMP2 CLC
03480 RTS
03490 ------------------------------
03500 ;
03510 ; TEXT AN POSITION IM Y-REG.
03520 ; AUSGEBEN / ENDKENNUNG = $EA
03530 ;
03540 TXTOUT PLA TEXTADRESSE
03550 STA $43 VOM STACK
03560 PLA
03570 STA $44
03580 .1 INC $43 ADRESSE+1
03590 BNE .2
03600 INC $44
03610 .2 LDX #0
03620 LDA ($43,X)
03630 CMP #$EA TEXT ENDE?
03640 BEQ .3
03650 STA DISPLY,Y
03660 INY
03670 BNE .1
03680 .3 JMP ($43) ZURUECK
03690 ------------------------------
03700 ;
03710 ; BILSCHIRM LOESCHEN
03720 ;
03730 CLRSCR LDY #0
03740 CLRSC1 LDA #0
03750 .1 STA DISPLY,Y
03760 INY
03770 CPY #$F0 LAENGE $F0
03780 BNE .1
03790 RTS
03800 ------------------------------
03810 ;
03820 ; TON AUSGEBEN UND AUF TASTE
03830 ; WARTEN
03840 ;
03850 HITRET STA $D200 AUDF1
03860 LDY #$EF
03870 .1 LDX #$FF
03880 .2 STX $D40A
03890 DEX
03900 BNE .2
03910 DEY
03920 STY $D201 AUDC1
03930 CPY #$E0
03940 BNE .1
03950 JSR GETKEY TASTE?
03960 RTS
03970 ------------------------------
03980 ;
03990 ; AUF EINE FUNKTIONSTASTE
04000 ; WARTEN
04010 ;
04020 GETKEY LDA $D01F
04030 CMP #7 KEINE
04040 BNE GETKEY TASTE?
04050 LDX #0
04060 .1 DEX ZEITVERZ.
04070 STX $D40A
04080 BNE .1
04090 .2 LDA $D01F TASTE
04100 CMP #7 ENTPRELLEN
04110 BEQ .2
04120 LDY #$40
04130 .3 STA $D40A
04140 STY $D01F
04150 DEY
04160 BNE .3
04170 STY $4D
04180 RTS ACCU=TASTE
04190 ------------------------------
}}}
!!DSKSYS.ASM
{{{
00010 ------------------------------
00020 ************
00030 ** DSKSYS **
00040 ************
00050 ------------------------------
00060 ;
00070 ; LAUFWERK TESTEN OB HIGH-SPEED
00080 ; MOEGLICH IST
00090 ;
00100 HSCHK STA DUNIT DRIVE NR.
00110 LDA #$3F COMMAND 3F
00120 STA DCOMND
00130 LDX #0
00140 INX
00150 STX DBYTLO 1 BYTE
00160 LDA #$40
00170 STA DSTATS GETBYTE
00180 JSR SETBUF BUF.=LOMEM
00190 JSR US SIO...
00200 TYA OK
00210 BPL .2
00220 CMP #$8B NO DRIVE?
00230 BEQ .1
00240 INC DUNIT DRIVE+1
00250 LDA DUNIT
00260 CMP #5 DRIVE5?
00270 BCC HSCHK WEITER...
00280 SEC
00290 RTS
00300 .1 LDY #0
00310 CLC
00320 RTS
00330 ;
00340 .2 LDA LOMEM HIGH-SPEED
00350 LDY DUNIT
00360 STA SPTBL-1,Y MERKEN
00370 LDY #$FF
00380 CLC
00390 RTS
00400 ------------------------------
00410 ;
00420 ; UNIVERSELLE SIO-ROUTINE
00430 ;
00440 US LDY DUNIT DRIVE NR.
00450 TYA
00460 ORA #$30
00470 STA $23A
00480 LDA DCOMND KOMMANDO
00490 STA $23B
00500 LDA DSECLO SEKTOR LO
00510 STA $23C
00520 LDA DSECHI SEKTOR HI
00530 STA $23D
00540 LDA SPTBL-1,Y SPEED IN
00550 STA $D204 AUDF3
00560 LDA #0
00570 STA $D206 AUDF6
00580 TSX STACK
00590 STX $318 RETTEN
00600 ;
00610 IO11 LDA RETRY VERSUCHE
00620 STA $36 SETZEN
00630 IO12 LDA #0
00640 STA $30
00650 STA $319
00660 LDA #$3A
00670 STA $32 BUFFER $23A
00680 LDA #2
00690 STA $33
00700 LDA #4
00710 STA $34
00720 LDA #$34 COMMAND=
00730 STA $D303 LOW
00740 JSR SEND1 COM. SENDEN
00750 LDA DBUFLO
00760 STA $32 BUFFER
00770 LDA DBUFHI SETZEN
00780 STA $33
00790 LDA DBYTLO LAENGE
00800 STA $34
00810 BIT DSTATS
00820 BPL IO2 SENDEN?
00830 JSR SEND1
00840 IO2 DEC $319
00850 JSR SETTI1 TIMEOUT
00860 BIT DSTATS SETZEN
00870 BVC IO3 EMPFANGEN?
00880 JSR GET1
00890 IO3 LDA #$A0
00900 STA $D207 SOUND AUS
00910 LDA $10
00920 STA $D20E
00930 JSR CLRTI TIMEOUT
00940 LDY $30 LOESCHEN
00950 STY DSTATS STATUS
00960 RTS
00970 ------------------------------
00980 SEND1 LDX #$80
00990 .1 DEX
01000 BNE .1
01010 LDA #$23 FUNKTION=
01020 JSR POKEY SENDEN
01030 LDY #0
01040 LDA ($32),Y
01050 STA $31
01060 STA $D20D BYTE SENDEN
01070 .2 INY
01080 CPY $34 ENDE?
01090 BEQ SENOUT
01100 LDA ($32),Y BUFFER
01110 JSR PUTBYT SENDEN
01120 JSR CHKSUM
01130 JMP .2 WEITER...
01140 ;
01150 SENOUT LDA $31 CHECKSUMME
01160 JSR PUTBYT SENDEN
01170 .1 LDA $D20E
01180 AND #8
01190 BNE .1
01200 LDX #0
01210 LDY #3 TIMEOUT
01220 JSR STOUT SETZEN
01230 LDA #$C0 IRQ-STATUS
01240 STA $D20E SETZEN
01250 JMP RECEIV WARTEN...
01260 ------------------------------
01270 GET1 LDA #0 CHECKSUMME
01280 STA $31 LOESCHEN
01290 LDY #0
01300 .1 JSR GETBYT DATENBLOCK
01310 STA ($32),Y EMPFANGEN
01320 JSR CHKSUM
01330 INY
01340 CPY $34
01350 BNE .1
01360 JSR GETBYT CHECKSUMME
01370 CMP $31
01380 BNE ERR8A ERROR
01390 RTS
01400 ;
01410 ERR8A LDA #$8A FEHLER
01420 ERRO1 STA $30 AUSGEBEN
01430 LDX $318
01440 TXS
01450 BIT $319 RETRY?
01460 BMI .1
01470 DEC $36
01480 BEQ .1
01490 JMP IO12 WEITER
01500 .1 JMP IO3 ENDE
01510 ------------------------------
01520 ;
01530 ; TIME-OUT SETZEN UND AUF
01540 ; RUECKMELDUNG WARTEN
01550 ;
01560 SETTI1 LDX DCOMND COMMAND
01570 CPX #$50 =FORMAT
01580 BCS SETTI2
01590 LDX #10 CA.1 MIN.
01600 BNE SETTI3
01610 SETTI2 LDX #1
01620 SETTI3 LDY #$60 CA.7 MIN
01630 JSR STOUT TIMEOUT
01640 * SETZEN
01650 RECEIV LDA #$13 LESEN
01660 JSR POKEY
01670 LDA #$3C
01680 STA $D303 AUF BYTE
01690 JSR GETBYT WARTEN
01700 CMP #$41 "A"
01710 BEQ CLRTI
01720 CMP #$43 "C"
01730 BEQ CLRTI
01740 CMP #$45 "E"
01750 BEQ ERR90
01760 LDA #$8B "N"
01770 BNE ERRO1 FEHLER 139
01780 ERR90 LDA #$90 FEHLER 144
01790 STA $30
01800 *
01810 CLRTI LDY #0 TIME-OUT
01820 LDX #0 LOESCHEN
01830 STOUT LDA #ERR8A TIMER 1
01840 STA $226 VEKTOR
01850 LDA /ERR8A SETZEN
01860 STA $227
01870 *
01880 TXA
01890 LDX #3
01900 .1 STA $D40A
01910 DEX
01920 BNE .1 TIMER 1
01930 STA $219 WERT
01940 STY $218 SETZEN
01950 RTS
01960 ------------------------------
01970 CHKSUM CLC CHECKSUMME
01980 ADC $31 ADDIEREN
01990 ADC #0
02000 STA $31
02010 RTS
02020 ------------------------------
02030 ;
02040 ; BYTE VOM LAUFWERK EMPFANGEN
02050 ;
02060 GETBYT LDA $D20E BYTE DA?
02070 AND #$20
02080 BNE GETBYT
02090 LDA #$DF CLEAR
02100 STA $D20E IRQ-FLAG
02110 LDA #$F8
02120 STA $D20E
02130 LDA $D20F
02140 STA $D20A I/O-ERROR
02150 BPL JERR
02160 AND #$20
02170 BEQ JERR
02180 LDA $D20D BYTE IN A
02190 RTS
02200 JERR JMP ERR8A
02210 ------------------------------
02220 ;
02230 ; BYTE AN LAUFWERK SENDEN
02240 ;
02250 PUTBYT PHA
02260 PUT1 LDA $D20E POKEY
02270 AND #$10 BEREIT?
02280 BNE PUT1
02290 LDA #$EF IRQ-FLAG
02300 STA $D20E SETZEN
02310 LDA #$F8
02320 STA $D20E
02330 PLA
02340 STA $D20D BYTE SENDEN
02350 RTS
02360 ------------------------------
02370 ;
02380 ; POKEY FUER EIN- UND AUSGABE
02390 ; VORBEREITEN
02400 ;
02410 POKEY STA $D20F SKCTL
02420 STA $D20A
02430 LDA #$28
02440 STA $D208 AUDCTL
02450 LDA #$A8
02460 STA $D207 SOUNDREG.
02470 LDA #$F8
02480 STA $D20E IRQ-ENABLE
02490 RTS
02500 ------------------------------
02510 ************
02520 ** SYSTEM **
02530 ************
02540 ------------------------------
02550 ;
02560 ; DA KEIN BETRIEBSSYSTEM VOR-
02570 ; HANDEN IST, MUESSEN DIE
02580 ; INTERRUPTS SELBST BEHANDELT
02590 ; WERDEN.
02600 ; NMI-ROUTINE:
02610 ;
02620 PNMI PHA
02630 LDA $D40F RESET
02640 AND #$20 (OLDRUNNER)
02650 BEQ .1
02660 JMP $100 ZUM COPY
02670 ;
02680 .1 TXA REGISTER
02690 PHA RETTEN
02700 TYA
02710 PHA
02720 STA $D40F NMI-STATUS
02730 ;
02740 ; TIMER 1 AUF NULL UEBERPRUEFEN
02750 ; WENN ABGELAUFEN IN TIMER-
02760 ; ROUTINE SPRINGEN
02770 ;
02780 NMIVEC LDY $218
02790 BNE .1
02800 LDY $219
02810 BEQ .2 TIMER 1=0
02820 DEC $219
02830 .1 DEC $218 TIMER -1
02840 BNE .2
02850 LDY $219
02860 BNE .2
02870 JSR NMIIND TIMEOUT...
02880 .2 LDA #8
02890 STA $D01F
02900 PLA REGISTER
02910 TAY ZURUECK
02920 PLA
02930 TAX
02940 PLA
02950 RTI NMI ENDE
02960 ------------------------------
02970 NMIIND JMP ($226) TIMER1 VEC.
02980 ------------------------------
02990 ;
03000 ; IRQ-VECTOR
03010 ;
03020 RETIRQ PHA
03030 LDA $D20E IRQ-FLAG
03040 EOR #$FF LOESCHEN
03050 STA $D20E
03060 LDA #0
03070 STA $D20E
03080 PLA
03090 RTI IRQ ENDE
03100 ------------------------------
}}}