source: thomson/code/3rdparty/sources2-hcl/FILES.ASM@ ceffc47

main
Last change on this file since ceffc47 was ceffc47, checked in by Adrien Destugues <pulkomandy@…>, 10 years ago

Add that collection of 3rdparty source I had lying on my disk for some time...

git-svn-id: svn://localhost/thomson@51 85ae3b6b-dc8f-4344-a89d-598714f2e4e5

  • Property mode set to 100644
File size: 18.5 KB
Line 
1** Traitement des fichiers et du DISK **
2
3 FCC "Hunks Exec "
4HUNKS JSR FILPOS
5 LDA #11 Bad File Mode
6 LDB 11,X Type du fichier:
7 CMPB #2 langage machine
8 LBNE ERROR
9 LDB 12,X Sémaphore:binaire
10 LBNE ERROR
11 LDD 14,X nb octets dans le
12 STD <BYLASE dernier secteur
13 LDB 13,X 1er bloc ds la FAT
14 STB <FATPTR
15 LDX #FAT+1 ce pointeur est-il
16 LDB B,X cohérent
17 CMPB #$A0
18 BLO H1FTOK
19 LDA #9 Bad File Structure
20 SUBB #$C1
21 CMPB #7
22 LBHI ERROR
23H1FTOK CLR <LASTBK dernier bloc? FAUX
24 CLR <LASTSC "" secteur? FAUX
25 LDX #IOZONE
26 STX <DKBUF
27 JSR LPOSFT 1er bloc fichier
28 JSR HNXSEC
29 LDA #40 affiche "Hunks "
30 LDU #HUNKS-14
31 LDB ,U+
32 JSR PUTC
33 DECA
34 CMPA #33
35 BNE *-8
36 JSR PUTC
37 DECA
38 BNE *-4
39 LDU <CURSOR
40 LEAU -313,U
41 STU <CURSOR
42 LDD #$718
43 STA <XPOS
44 STB <CMPT+1
45
46HDGON LDU #IODESC
47 LDY #5
48 JSR LVIDBF
49 LDY IODESC+1 nombre d'octets
50 LDU IODESC+3 adresse début
51 LDA IODESC
52 BNE EOHNK code <>0 = EOfile
53 TFR U,D
54 JSR DA2HEX
55 TFR B,A
56 JSR DA2HEX
57 LDB #'-
58 JSR PUTC
59 LDB #'>
60 JSR PUTC
61 TFR Y,D
62 SUBD #1
63 LEAU D,U
64 TFR U,D
65 JSR DA2HEX
66 TFR B,A
67 JSR DA2HEX
68 LDA <XPOS
69 CMPA #20
70 BLO AFHNK2
71 DEC <CMPT+1
72 BNE HFPAUS
73 JSR GETC
74 BCC *-3
75 CMPB #2
76 BEQ HVIDBF-1
77 LDA #24
78 STA <CMPT+1
79HFPAUS LDD #$3320
80 JSR PUTC
81 DECA
82 BNE *-4
83 LDU <CURSOR
84 LEAU -313,U
85 STU <CURSOR
86 LDA #7
87 STA <XPOS
88 BRA EOHNK-8
89AFHNK2 LDB #32
90 JSR PUTC
91 JSR PUTC
92 LDU IODESC+3
93 BSR HVIDBF
94 JMP HDGON
95EOHNK LDA #9 Bad File Structure
96 LEAX -IOZONE,X nombre d'octets
97 CMPX <BYLASE dans le dernier
98 LBNE ERROR secteur
99 LDA <XPOS
100 CMPA #10
101 BHI EOHNK2
102 LDU <CURSOR
103 LEAU -7,U
104 STU <CURSOR
105 CLR <XPOS
106 BRA EOHNK3
107EOHNK2 LDB #32
108 JSR PUTC
109 LDA <XPOS
110 BNE *-5
111EOHNK3 LDA #7
112 LDU #HUNKS-7
113 LDB ,U+
114 JSR PUTC
115 DECA
116 BNE *-6
117 LDD IODESC+3
118 JSR DA2HEX d'exécution
119 TFR B,A
120 JSR DA2HEX
121 LDB #32
122 JSR PUTC
123 LDA <XPOS
124 BNE *-5
125 RTS
126
127HVIDBF LEAX 1,X vide le buffer I/O
128 CMPX #IOZONE+255 fin buffer ?
129 BNE *+8
130 LDB <LASTSC fin dernier sector
131 BNE HNXSEC-1 -> fin fichier
132 BSR HNXSEC
133 LEAY -1,Y fin transfert ?
134 BNE HVIDBF
135 RTS
136
137HNXSEC JSR DISK
138 INC <DKSEC secteur suivant
139 DEC <CMPT fin du bloc ?
140 LBNE LNXSCF
141 LDB <LASTBK dernier bloc lu
142 LBEQ LPOSFT ->pas de suivant!
143 STB <LASTSC
144 JMP LNXSCF dernier secteur
145
146LOADM JSR FILPOS
147 LDA <FILETY
148 BNE IGFITY
149 LDB 11,X Type du fichier:
150 CMPB #2 langage machine
151 BNE *+6
152 LDB 12,X Sémaphore:binaire
153 BEQ *+7
154 LDA #11 Bad File Mode
155 JMP ERROR
156IGFITY LDU 14,X nb octets dans le
157 STU <BYLASE dernier secteur
158 LDB 13,X 1er bloc ds la FAT
159 STB <FATPTR
160 LDX #FAT+1 ce pointeur est-il
161 LDB B,X cohérent
162 CMPB #$A0
163 BLO L1FTOK
164 SUBB #$C1
165 CMPB #8
166 BLO *+7
167 LDA #9 Bad File Structure
168 JMP ERROR
169L1FTOK CLR <LASTSC "" secteur? FAUX
170 CLR <LASTBK dernier bloc? FAUX
171 LDX #IOZONE
172 STX <DKBUF
173 BSR LPOSFT 1er bloc fichier
174 LDA <FILETY
175 BEQ RILODM
176 LDU <LSHIFT début du buffer
177 LDY <FILSIZ taille+1 du buffer
178 BSR LNXSEC
179 LEAY -1,Y
180 BRA LVIDBF
181RILODM BSR LNXSEC
182
183LDGON LDU #IODESC
184 LDY #5
185 BSR LVIDBF
186 LDY IODESC+1 nombre d'octets
187 LDU IODESC+3 adresse début
188 LDD <LSHIFT
189 LEAU D,U +décalage
190 LDA IODESC
191 BNE EOLOD code <>0 = EOfile
192 BSR LVIDBF
193 BRA LDGON
194EOLOD LDA #9 Bad File Structure
195 LEAX -IOZONE,X nombre d'octets
196 CMPX <BYLASE dans le dernier
197 LBNE ERROR secteur
198 LDD IODESC+3
199 LDU #OPGJSR-4 adresse
200 JSR ATOHEX d'exécution
201 TFR B,A
202 JMP ATOHEX
203
204LVIDBF LDB ,X+ vide le buffer I/O
205 STB ,U+ vers la mémoire
206 CMPX #IOZONE+255 fin buffer ?
207 BNE *+8
208 LDB <LASTSC fin dernier sector
209 BNE LNXSEC-1 -> fin fichier
210 BSR LNXSEC
211 LEAY -1,Y fin transfert ?
212 BNE LVIDBF
213 RTS
214
215LNXSEC JSR DISK
216 INC <DKSEC secteur suivant
217 DEC <CMPT fin du bloc ?
218 BNE LNXSCF
219 LDB <LASTBK dernier bloc lu ?
220 BEQ LPOSFT NON:prépare suivnt
221 STB <LASTSC OUI:c'est donc le
222 LDB <FILETY dernier secteur
223 BEQ LNXSCF que l'on vient de
224 CMPY <BYLASE
225 BLS LNXSCF
226 LDY <BYLASE charger ...
227 LEAY 1,Y
228 BRA LNXSCF (->taille si !BIN)
229
230LPOSFT LDX #FAT+1
231 LDB <FATPTR
232 ABX
233 LDA <FATPTR
234 LDB #1 Piste/Secteur
235 LSRA d'après No du bloc
236 BCC *+4
237 ADDB #8
238 STD <DKTRK
239 LDB ,X "libère" le bloc
240 LDA #-1 que l'on va lire
241 STA ,X
242 CMPB #$A0 à quoi ressemble
243 BHS *+8 le bloc que l'on
244 TFR B,A va lire ?
245 LDB #8 (nombre secteurs,
246 BRA LRBFTF fin de chaîne...?)
247 SUBB #$C1
248 CMPB #7
249 BHI LDBKER
250 INCB on va lire le
251 STA <LASTBK dernier bloc.
252LRBFTF STB <CMPT nombre de secteurs
253 STA <FATPTR
254LNXSCF LDX #IOZONE
255 RTS
256LDBKER LDA #9 Bad File Structure
257 JMP ERROR
258
259KILLM JSR FILPOS trouve le fichier
260 JSR KILFAT modifie FAT et DIR
261 LDB #2
262 STB <DKOPC commande WRITE
263 JSR DISK ré-écriture du DIR
264 LDX #FAT
265 STX <DKBUF
266 STB <DKSEC
267 JMP DISK écriture de la FAT
268
269FILPOS CLR <DKOPC opération READ
270 LDD #$1402
271 STD <DKTRK
272 LDX #FAT
273 STX <DKBUF
274 JSR DISK charge la FAT
275 LDX #CATALG
276 STX <DKBUF
277 LDA #3
278READIR STA <DKSEC
279 JSR DISK charge directory
280 LDX #CATALG
281DIRCMP PSHS X,A
282 LDU #FILNAM
283 LDA #11
284 LDB ,X+
285 CMPB ,U+
286 BNE *+5
287 DECA
288 BNE *-7
289 PULS A,X
290 BEQ EOSDIR oui:stop recherche
291 LDB ,X
292SRDIR1 CMPB #$FF fin du catalogue
293 BEQ FLNTFD
294 LEAX 32,X
295 CMPX #CATALG+256
296 BLO DIRCMP
297 INCA
298 CMPA #17
299 BLO READIR
300FLNTFD LDA #10 File Not Found
301 JMP ERROR
302EOSDIR RTS
303
304
305SAVEM LDA <FILETY
306 LDY #1
307 LDX <FILSIZ
308 CMPA #2
309 BNE QTBLCK
310 LEAX 10,X nombre de blocs
311QTBLCK CMPX #255 requis au total =
312 BLO SVRDFT (5+taille+5)/255
313 LEAY 1,Y
314 LEAX -255,X
315 BRA QTBLCK
316SVRDFT LDX #$1402
317 STX <DKTRK
318 LDX #FAT
319 STX <DKBUF
320 CLR <DKOPC
321 JSR DISK charge la FAT
322 LDB ,X+
323 BNE ANAFAT-5
324 LDD 40,X
325 CMPD #$FEFE
326 BEQ *+7
327 LDA #6 bad FAT structure
328 JMP ERROR
329ANAFAT LDB ,X+
330 CMPB #$FF
331 BNE *+6
332 LEAY -1,Y nombre de blocs --
333 BEQ PLAFOK
334 CMPB #$FE
335 BHS EANFAT
336 CMPB #$A0
337 BLO EANFAT
338 SUBB #$C1
339 CMPB #8
340 BLO EANFAT
341 LDA #6 bad FAT structure
342 JMP ERROR [0-9F][C1-C8]FE,FF
343EANFAT CMPX #FAT+161
344 BLO ANAFAT
345 LDA #7 disk full
346 JMP ERROR
347PLAFOK LDX #CATALG
348 STX <DKBUF
349 CLR <DIRSEC
350 LDA #3
351RDIRNX STA <DKSEC
352 LDX <DKBUF
353 LEAU 256,X
354 STU SRPLDF+4
355 JSR DISK charge directory
356SRPLDR PSHS X,A le fichier
357 LDU #FILNAM à sauver existe
358 LDA #11 déjà ?
359 LDB ,X+
360 CMPB ,U+
361 BNE *+5
362 DECA
363 BNE *-7
364 PULS A,X
365 BNE *+7 non:analyse suiv..
366 JSR KILFAT oui: le détruit et
367 BRA PLADF1 arrête l'analyse
368 LDB ,X
369 BNE SRPLD1
370 LDB <DIRSEC entrée libre:1ère?
371 BNE SRPLDF
372 STA <DIRSEC
373 STX <DIRPTR
374 LDU #IOZONE
375 STU <DKBUF
376 BRA SRPLDF
377SRPLD1 CMPB #$FF fin du catalogue
378 BEQ PLADFD
379SRPLDF LEAX 32,X
380 CMPX #CATALG+256 !! est modifié
381 BLO SRPLDR
382 INCA
383 CMPA #17
384 BLO RDIRNX
385 LDB <DIRSEC
386 BNE PLADF1
387 LDA #8 directory full
388 JMP ERROR
389PLADFD LDB <DIRSEC
390 BEQ PLADF1
391 LDA <DIRSEC
392 LDX <DIRPTR
393PLADF1 STA <DIRSEC
394 CMPX #IOZONE
395 BLO PLADF2
396 LEAX -256,X
397 CLRA
398 LDU #CATALG
399 LDY #IOZONE
400 LDB ,Y+
401 STB ,U+
402 DECA
403 BNE *-5
404PLADF2 STX <DIRPTR
405
406 LDD #1
407 STD <DKTRK
408 LDA #2 opération WRITE
409 STA <DKOPC
410 LDD <EXEADR
411 STD IODESC+3
412 LDD #$FF00
413 STD IODESC
414 STB IODESC+2
415 LDA #1 1er secteur
416 STA <FATPTR se positionne sur
417 JSR SPOSFT le 1er bloc libre
418 LDB <FATPTR
419 SUBB #2 Numéro du 1er bloc
420 STB 13,X logique du fichier
421 LDX #IOZONE
422 STX <DKBUF
423
424 LDY <FILSIZ
425 LDU <BEGADR
426 LDB <FILETY
427 CMPB #2
428 BNE NOSHNK
429 CLR ,X+
430 STY ,X++ longueur à écrire
431 STU ,X++
432 LDB <IMABNK si c'est une image
433 BMI *+6 MAP, le début est
434 CLR -1,X en fait $000 dans
435 CLR -2,X le fichier !!!
436NOSHNK CLR IOZONE+255
437 LDB #8 secteurs par bloc
438 STB <CMPT
439
440 BSR CPNSAV sauve le programme
441 LDB <FILETY
442 CMPB #2
443 BNE NOEHNK
444 CMPX #IOZONE+255
445 BNE *+4 si fin buffer I/O,
446 BSR SVNXTS avance d'1 secteur
447 LDU #IODESC
448 LDY #5
449 BSR CPNSAV sauve terminateur
450NOEHNK CMPX #IOZONE+255
451 BEQ *+5 si pas déja fait,
452 JSR DISK sauve buffer I/O
453 LEAY -IOZONE,X nombre octets
454 LDX #FAT utilisés dans
455 LDB <FATPTR le dernier secteur
456 ABX
457 LDB <DKSEC nombre de secteurs
458 CMPB #9 utilisés dans le
459 BLO *+4 dernier bloc
460 SUBB #8
461 ADDB #$C0
462 STB -1,X
463 BRA BLKTRV+2
464IODESC FCB $FF,0,0,00,00
465
466CPNSAV LDB ,U+ remplit buffer I/O
467 STB ,X+
468 CMPX #IOZONE+255
469 BLO *+4
470 BSR SAVSEC
471 LEAY -1,Y
472 BNE CPNSAV
473 RTS
474SAVSEC JSR DISK écrit un secteur
475 CMPY #1
476 BEQ SNXTSF+3
477SVNXTS INCA passe au secteur
478 CMPA #17 suivant
479 BLO *+6
480 INC <DKTRK
481 LDA #1
482 STA <DKSEC
483 DEC <CMPT 8 secteurs / bloc
484 BNE SNXTSF
485 LDB #8
486 STB <CMPT
487 LDX #FAT
488 LDB <FATPTR Prec=Courant
489 ABX
490 BSR SPOSFT nouveau Courant
491 LDB <FATPTR
492 SUBB #2
493 STB -1,X Prec->Suiv=Courant
494SNXTSF LDX #IOZONE
495 RTS
496SPOSFT PSHS X
497 LDX #FAT
498 LDB <FATPTR
499 ABX
500SRBKFT LDB ,X+ se positionne sur
501 INC <FATPTR le bloc libre
502 CMPB #$FF suivant
503 BEQ BLKTRV
504 ADDA #8
505 CMPA #17
506 BLO *+6
507 INC <DKTRK
508 LDA #1
509 STA <DKSEC
510 BRA SRBKFT
511BLKTRV PULS X,PC
512
513 LDX <DIRPTR suite & fin de la
514 LDU #FILNAM sauvegarde
515 LDA #11
516 LDB ,U+ copie du nom
517 STB ,X+ et du suffixe
518 DECA
519 BNE *-5
520 LDD <FILETY Type du fichier:
521 STA ,X+ langage machine
522 STB ,X++ Sémaphore: binaire
523 STY ,X++ Nb octets dans le
524 LDA #8 dernier secteur
525 LDB ,U+
526 STB ,X+ copie commentaire
527 DECA
528 BNE *-5
529 LDD #8
530 STA ,X+ 18 à 1F : réservé
531 DECB
532 BNE *-3
533
534 LDD #$1402
535 STD <DKTRK
536 LDX #FAT
537 STX <DKBUF
538 JSR DISK
539 LDB <DIRSEC
540 STB <DKSEC
541 LDX #CATALG
542 STX <DKBUF
543 JMP DISK
544
545KILFAT PSHS X,A
546 CLR ,X
547 LDB 13,X 1er bloc ds la FAT
548 LDX #FAT+1
549 ABX
550 LDA #$FF
551 LDB ,X
552 STA ,X
553 CMPB #$A0
554 BLO KILFAT+6 détruit chaînage
555 SUBB #$C1
556 CMPB #7
557 BHI *+4
558 PULS A,X,PC
559 LDA #9 Bad File Structure
560
561ERROR LDB #24
562 MUL
563 LDU #ERRTXT-24
564 LEAU D,U
565 LDA <IMABNK
566 BMI STDERR
567 PSHS U,A
568 LDA $E7C3
569 ANDA #254
570 STA $E7C3
571 JSR VW2BNK
572 LDX #NULL
573 JSR SETPAL
574 CLR >$E7DC
575 JSR FABSCR
576 PULS A,U
577 STA $E7E5
578STDERR LDX #$4000+192*40
579 CLR ,X+
580 CMPX #$5F40
581 BNE *-5
582 LDX #SCREEN+8+24*320
583 STX <CURSOR
584 LDD #$1808
585 STB <XPOS
586 LDX #SCREEN+25*320
587 STX <BOTTOM
588 CLR <CLIGNO
589 LDB ,U+
590 JSR PUTC affiche l'erreur
591 DECA
592 BNE *-6
593 JSR GETC
594 TSTB
595 BEQ *-4 attente clavier
596 LDX ,S
597 CMPX #ERRET1 dépile tout et
598 BEQ *+6 retour au menu
599 LEAS 1,S (fin d'option)
600 BRA *-9
601 CLRA
602 JMP HWINDW
603
604ERRTXT FCC " No Disk "
605 FCC " Bad Sector "
606 FCC " Timing Failure "
607 FCC " Unreadable Datas "
608 FCC " Disk Write Protected "
609 FCC " Bad FAT Structure "
610 FCC " Disk Full "
611 FCC " Directory Full "
612 FCC " Bad File Structure "
613 FCC " File Not Found "
614 FCC " Bad File Type "
615 FCC " Uncompressible Picture "
616 FCC " No Gadget Installed "
617
618FILNAM FCC "FILENAMEBINcomments"
619DISK PSHS U,Y,X,B,A initialisations
620 LDX #$E7D0
621 LDA #$41
622 TST <DKDRV sélection du drive
623 BEQ *+4
624 LDA #1
625 STA 2,X
626 STA <DKTMP
627 LDU #DKOPER
628 LDB <DKOPC
629 JSR [B,U]
630 PSHS CC
631 CLR ,X
632SORTIE LDB #$40 sortie
633 STB 2,X
634 PULS CC
635 LBNE ERROR
636 PULS A,B,X,Y,U,PC
637DKOPER FDB READ,WRITE
638
639 RTS
640READ JSR POSPIS
641 BNE READ-1 bad positionnement
642 JSR COMPEN
643 LDB #$1B
644 JSR POSSEC
645 LDA #4
646 LDY #$7500
647RDTRY1 LEAY -1,Y
648 BNE *+5
649 LDA #2 identificateur
650 RTS incorrect
651 LDB ,X
652 BITB #2
653 BEQ RDTRY1
654 LDB 3,X
655RDTRY2 DECA
656 BNE *+5
657 LDA #3
658 RTS problème de timing
659 LDB ,X
660 BPL *-2
661 LDB 3,X
662 CMPB #$FB
663 BNE RDTRY2
664 LDY #256
665LIT LDB ,X lecteur prêt ?
666 BPL *-2
667 LDB 3,X
668 STB ,U+
669 LEAY -1,Y
670 BNE LIT
671 LDB ,X
672 BITB #8 opération finie ?
673 BEQ *-4
674 BITB #4
675 BEQ *+4
676 LDA #4 checksum incorrect
677 RTS
678
679WRITE JSR POSPIS
680 BNE WRITE-1 pas positionné
681 LDA 1,X
682 BITA #4
683 BEQ *+5
684 LDA #5 disquette protégée
685 RTS
686 JSR COMPEN
687 LDB #$19
688 BSR POSSEC
689 LDY #$7500
690WRTRY1 LEAY -1,Y
691 BNE *+5
692 LDA #2 identificateur
693 RTS incorrect
694 LDB ,X
695 BITB #2
696 BEQ WRTRY1
697 STA 3,X
698 LDB ,X
699 BPL *-2
700 STA 3,X
701 LDB ,X
702 BPL *-2
703 LDB #$FB
704 STB 3,X
705 LDY #256
706ECRIT LDB ,X lecteur prêt ?
707 BPL *-2
708 LDB ,U+
709 STB 3,X
710 LEAY -1,Y
711 BNE ECRIT
712 LDB ,X
713 BITB #8 opération finie ?
714 BEQ *-4
715 JMP WAIT2-6
716
717COMPEN LDB <DKTRK si pistes internes
718 CMPB #$39 pré-compensation
719 BPL *+7
720 LDD #$9F00+256/8
721 BRA *+5
722INTERN LDD #$1F02+256/8
723 STA 7,X
724 STB 1,X
725 RTS
726
727POSSEC LDA <DKSEC
728 STA 5,X
729 LDA #10
730 STA 4,X
731 LDA #$A1
732 STA 3,X
733 LDU <DKBUF
734 STB ,X
735 RTS
736
737POSPIS BSR TSTDRV
738 BNE *+5 Lecteur non prêt
739 BSR MOVE
740 CLRA
741 RTS
742TSTDRV LDY #$8000 lance le drive
743 LDB <DKTMP (s'il existe!)
744 ORB #4
745 STB 2,X active moteur
746 ANDB #$FB
747 STB 2,X inactive moteur
748 LEAY -1,Y
749 BNE *+5
750 LDA #1 la disquette
751 RTS ne répond pas
752 LDB 1,X
753 ANDB #2
754 BEQ TSTDRV+4
755 CLRA le drive est prêt
756 RTS
757MOVE JSR WAIT3
758 LDB <TRACK la piste où est la
759 LDA <DKTMP tête présentement
760 SUBB <DKTRK
761 BEQ PISOK
762 BPL *+5
763 ORA #$20
764 NEGB
765 STA 2,X
766MVTETE ORA #$14 commande de pas ON
767 STA 2,X
768 ANDA #$EB pas OFF
769 STA 2,X
770 BSR WAIT3
771 DECB
772 BNE MVTETE
773 BSR WAIT2
774PISOK LDB <DKTRK la tête est sur la
775 STB 6,X bonne piste
776 STB <TRACK
777 RTS
778
779 LDY #$6C
780 BRA WAIT3+4
781WAIT2 LDY #$750
782 BRA WAIT3+4
783WAIT3 LDY #$2EC
784 LEAY -1,Y
785 BNE *-2
786 RTS
Note: See TracBrowser for help on using the repository browser.