source: thomson/code/3rdparty/sources2-hcl/OPTIONS.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: 25.2 KB
Line 
1HNKTXT * option: Hunks d'un fichier
2 FCC "HUNKS @"
3 FCB 0
4 FCC "ILENAME."
5 FCB 0
6 FCC "IN"
7OPHUNK JSR FILRQT nom du fichier
8 JSR IPIHEX
9EOPHNK JSR HWINDW efface curseur etc
10 BEQ *+6
11 JSR HUNKS
12 CLRA
13 RTS
14
15LODTXT * option: lecture d'un prog BIN
16 FCC "LOADM @"
17 FCB 0
18 FCC "ILENAME."
19 FCB 0
20 FCC "IN +SHIFT $"
21 FDB 0,0
22OPLOAD JSR FILRQT nom du fichier
23 JSR IPIHEX
24 BEQ EOPLOD
25 LEAU 12,Y
26 LDA #4
27 JSR DINPUT valeur du décalage
28 BEQ EOPLOD au chargement
29 STU <LSHIFT
30 CLR <FILETY
31EOPLOD JSR HWINDW efface curseur etc
32 BEQ *+6
33 JSR LOADM
34 CLRA
35 RTS
36
37RIDTXT * option: lecture d'un fichier
38 FCC "READ @"
39 FCB 0
40 FCC "ILENAME."
41 FCB 0
42 FCC "IN>BUFFER $"
43 FDB 0,0
44 FCC " - $"
45 FDB 0,0
46OPREAD JSR FILRQT nom du fichier
47 JSR IPIHEX
48 BEQ EOPRID
49 LEAU 12,Y
50 JSR CLRBAR
51 LDA #4
52 STA <FILETY
53 JSR DINPUT adresse début du
54 BEQ EOPRID buffer
55 STU <LSHIFT
56 LDA #4
57 JSR DIPUT2 adresse fin du
58 BEQ EOPRID buffer
59 LDD #2
60 SUBD <LSHIFT
61 LEAU D,U
62 STU <FILSIZ taille+1 du buffer
63 LDA #-1
64EOPRID JSR HWINDW efface curseur etc
65 BEQ *+6
66 JSR LOADM
67 CLRA
68 RTS
69
70WRITXT * option: écriture d'un fichier
71 FCC "WRITE @"
72 FCB 0
73 FCC "ILENAME."
74 FCB 0
75 FCC "IN ; "
76 FCB 0
77 FCC "omments>FILE TYPE: "
78 FCB 0
79 FCC " ; DATA TYPE: "
80 FCB 0
81 FCC ">FROM $"
82 FDB 0,0
83 FCC " TO $"
84 FDB 0,0
85 FCC " EXEC $"
86 FDB 0,0
87OPWRIT JSR FILRQT saisie du nom
88 BEQ *+5
89 JSR COMRQT saisie commentaire
90 JSR IPIHEX
91 BEQ EOPWRT
92 BSR CLRBAR
93 LEAU 23,Y
94 LDD #CHKFTY
95 STD <INPCHK
96 LDD #VALFTY
97 STD <INPVAL
98 LDA #1
99 JSR DIPUT3 type du fichier
100 BEQ WRABOR
101 STB <FILETY
102 LDD #CHKDTY
103 STD <INPCHK
104 LDD #VALDTY
105 STD <INPVAL
106 LDA #1
107 JSR DIPUT4 type des données
108WRABOR JSR IPIHEX
109 BEQ EOPWRT
110 STB <DATATY
111 BSR CLRBAR
112 LDA #4
113 JSR DIPUT2 adresse de début
114 BEQ EOPWRT
115 STU <BEGADR
116 LDA #4
117 JSR DIPUT2 adresse de fin
118 BEQ EOPWRT
119 LDD <BEGADR
120 TFR U,D
121 SUBD <BEGADR
122 ADDD #1
123 STD <FILSIZ
124 LDA #4
125 LDB <FILETY ssi c'est un
126 CMPB #2 programme en LM,
127 BNE EOPWRT on lit son
128 JSR DIPUT2 adresse exécution
129 BEQ EOPWRT
130 STU <EXEADR
131
132EOPWRT JSR HWINDW efface curseur etc
133 BEQ *+6
134 JSR SAVEM
135 CLRA
136 RTS
137
138CLRBAR LDX #$4000+192*40
139 LDD #0
140 STD ,X++ efface la barre de
141 CMPX #$5F40 commandes
142 BLO *-5
143 LDX #SCREEN+4+24*320
144 STX <CURSOR
145 LDB #4
146 STB <XPOS
147 RTS
148
149KILTXT * option: efface un fichier
150 FCC "KILL @"
151 FCB 0
152 FCC "ILENAME."
153 FCB 0
154 FCC "IN"
155OPKILL JSR FILRQT
156 JSR IPIHEX
157 JSR HWINDW efface curseur etc
158 BEQ *+6
159 JSR KILLM
160 CLRA
161 RTS
162
163FILRQT LEAY ,U lit un descripteur
164 LDX #CHKFIL
165 STX <INPCHK
166 LDX #VALASC
167 STX <INPVAL
168 LDA #8
169 JSR INPUT nom du fichier
170 BEQ COMRQT-1
171 LDX #FILNAM
172 LDB ,U+
173 STB ,X+
174 DECA
175 BNE *-5
176 CMPX #FILNAM+8
177 BHS *+8
178 LDB #32 complète le nom
179 STB ,X+ avec des espaces
180 BRA *-9
181 LEAU 8,Y
182 LDB ,U+ affiche "."
183 JSR PUTC
184 LDA #3
185 JSR INPUT suffixe du fichier
186 BEQ COMRQT-1
187 LDB ,U+
188 STB ,X+
189 DECA
190 BNE *-5
191 CMPX #FILNAME+11
192 BHS *+8
193 LDB #32 complète suffixe
194 STB ,X+ avec des espaces
195 BRA *-9
196 LDA #-1 code retour = OK
197 RTS
198COMRQT LEAU 12,Y
199 LDA #3
200 LDB ,U+ affiche " ; "
201 JSR PUTC
202 DECA
203 BNE *-6
204 LDD #CHKASC
205 STD <INPCHK
206 LDA #8
207 JSR INPUT commentaire
208 BEQ COMRQT-1
209 LDB ,U+
210 STB ,X+
211 DECA
212 BNE *-5
213 CMPX #FILNAME+19
214 BHS COMRQT-3
215 LDB #32
216 STB ,X+
217 BRA *-9
218
219RGETXT * option: charge un registre
220 FCC "LET REGISTER @"
221 FDB 0
222 FCC " = $"
223 FDB 0,0
224OPRGEQ LDX #CHKASC
225 STX <INPCHK
226 LDX #VALREG
227 STX <INPVAL
228 LDA #2
229 JSR INPUT
230 JSR IPIHEX
231 BEQ EOPRGQ
232 LDA -3,U longueur
233 NEGA est-ce D ?
234 BNE *+6
235 LDA #2
236 LEAY 3,Y
237 PSHS Y,A sauve longueur
238 LDU #RGETXT+16
239 ASLA digits=2*longueur
240 JSR DINPUT
241 PULS B,Y
242 BEQ EOPRGQ
243 BITB #1 registre 16 bits ?
244 BNE *+6
245 STU ,Y nouveaux 16 bits
246 BRA EOPRGQ
247 TFR U,D
248 STB ,Y nouveaux 8 bits
249EOPRGQ CLRA
250 JMP HWINDW
251
252 FCB -2
253LRGEQU FCB 'P,'C,-2,32,'U,-2,32,'Y,-2
254 FCB 32,'X,-1,'D,'P,-1,32,'B,-1
255 FCB 32,'A,-1,'C,'C,-2,32,'S,00
256 FCB 32,'D
257
258REGTXT * option: affiche les registres
259 FCC "REGISTERS@"
260 FCC " PC A B X Y U "
261 FCC " S DP CC "
262OPREGI CLRA
263 JSR GETC
264 CMPB #2
265 LBEQ HWINDW
266 CMPB #13
267 BNE OPREGI+1
268 JSR HWINDW
269 LDX #OPREGI-40
270 LDB ,X+
271 JSR PUTC
272 CMPX #OPREGI
273 BLO *-8
274 LDX #DA2HEX
275 LDY #PUTC
276 LDU #DIR*256+REGIST
277 LDB #32
278 LDA ,--U affiche PC fort
279 JSR ,X
280 LDA 1,U affiche PC faible
281 JSR ,X
282 JSR ,Y
283 LDA -9,U affiche A
284 JSR ,X
285 JSR ,Y
286 LDA -8,U affiche B
287 JSR ,X
288 JSR ,Y
289 LDA -6,U affiche X fort
290 JSR ,X
291 LDA -5,U affiche X faible
292 JSR ,X
293 JSR ,Y
294 LDA -4,U affiche Y fort
295 JSR ,X
296 LDA -3,U affiche Y faible
297 JSR ,X
298 JSR ,Y
299 LDA ,--U affiche U fort
300 JSR ,X
301 LDA 1,U affiche U faible
302 JSR ,X
303 JSR ,Y
304 LDA -10,U affiche S fort
305 JSR ,X
306 LDA -9,U affiche S faible
307 JSR ,X
308 JSR ,Y
309 JSR ,Y
310 LDA -5,U affiche DP
311 JSR ,X
312 JSR ,Y
313 JSR ,Y
314 LDA -8,U affiche CC
315 JSR ,X
316 CLRA
317 JSR ,Y
318 JMP ,Y
319
320JSRTXT * option: exécution en mémoire
321 FCC "EXECUTE $@"
322 FDB 0,0
323OPGJSR LDA #4
324 JSR INPUT
325 BEQ EOPJSR
326 PSHS DP,CC
327 STU <SUBADR
328 STS <STKBAK
329 LDX #GETC FAB-Monitor n'est
330 STX $600A pas ré-entrant !!!
331 LDX BUFCLV
332 STX $6079
333 LDS #DIR*256+REGIST-11
334 PULS A,B,DP,X,Y,U
335 LDS DIR*256+REGIST-14
336 LEAS -6,S
337 PSHS A }
338 LDA DIR*256+REGIST-12 } charge
339 TFR A,CC } CC
340 PULS A }
341 JSR [DIR*256+SUBADR]
342 PSHS A }
343 TFR CC,A } sauve
344 STA DIR*256+REGIST-12 } CC
345 PULS A }
346 LEAS 6,S
347 STS DIR*256+REGIST-14
348 LDS #DIR*256+REGIST-2
349 PSHS U,Y,X,DP,B,A
350 LDS DIR*256+STKBAK
351 LDX #BUFCLV+2
352 STX $6079
353 LDX #MYGETC restaure
354 STX $600A l'indirection GETC
355 PULS CC,DP
356 CLRA
357EOPJSR JMP HWINDW
358
359JMPTXT * option: saut en mémoire-adieu!
360 FCC "JUMP $@"
361 FDB 0,0
362OPJUMP LDA #4
363 JSR INPUT
364 BEQ EOPJMP peur de sauter ?
365 STU REGIST-2 PC=adresse saut
366 LDA #-1 code retour=EXIT!
367EOPJMP JMP HWINDW
368
369POKTXT * option: équivalent du POKE
370 FCC "POKE $@"
371 FDB 0,0
372 FCC ",$"
373 FDB 0,0,0,0,0,0,0,0
374OPPOKE LDA #4
375 LEAY 4,U
376 JSR INPUT l'adresse où POKEr
377 BEQ EOPPOK
378 LDB ,Y+
379 JSR PUTC
380 CMPB #'$
381 BNE *-7
382 LEAY ,U Y pointe la zone
383 LDX #CHKSOP
384 STX <INPCHK
385 LDX #VALSOP
386 STX <INPVAL (longueur paire)
387PKIMPR LDD #$10FF
388 LDU #OPPOKE-16
389 JSR INPUT valeur à y déposer
390 JSR IPIHEX
391 BEQ EOPPOK
392 TSTB chaîne " ?
393 BEQ *+3
394 LSRA
395POKE LDB ,U+
396 STB ,Y+
397 DECA
398 BNE POKE
399 LDU #OPPOKE-22 adresse début
400 TFR Y,D
401 JSR ATOHEX
402 TFR B,A
403 JSR ATOHEX
404 CLRA
405EOPPOK JMP HWINDW
406
407BNKTXT * option: change de bank
408 FCC "BANK $@"
409 FDB 0
410OPBANK LDA $E7E5
411 JSR ATOHEX
412 LDX #VALBNK
413 STX <INPVAL
414 LDA #2
415 LEAU -2,U
416 JSR INPUT
417 BEQ EOPBNK juste consulté ?
418 TFR U,D
419 STB $E7E5 valide bank
420EOPBNK LDX #VALHEX
421 STX <INPVAL
422 JMP HWINDW
423
424LNFEED * option: saute une ligne
425 FCC "RETURN@"
426OPFEED JSR HWINDW
427 LDD #$2820
428 JSR PUTC
429 DECA
430 BNE *-4
431 RTS
432
433RAZWIN * option: efface la fenêtre
434 FCC "CLS@"
435OPRAZW JSR HWINDW
436 LDX #SCREEN
437 STX <CURSOR
438 LDA #24
439 STA <CMPT
440RAZLIN LDD #$2820
441 JSR PUTC
442 DECA
443 BNE *-4
444 DEC <CMPT
445 BNE RAZLIN
446 STX <CURSOR
447 RTS
448
449QITTXT * option: quitter le moniteur
450 FCC "QUIT@"
451OPQUIT CLRA
452QUIT JSR GETC
453 CMPB #2 touche Stop
454 BEQ QTABRT
455 CMPB #13 touche Entrée
456 BNE QUIT
457 DECA validation Quitter
458QTABRT JMP HWINDW code retour=-1
459
460SERTXT * option: recherche d'une chaîne
461 FCC "SEARCH $@"
462
463OPSEAR LDX #CHKSOP
464 STX <INPCHK
465 LDX #VALSOP longueur paire
466 STX <INPVAL
467 LDD #$10FF 8 octets=16 digits
468 LDU #SRWORD+17
469 JSR INPUT
470 TSTB chaîne " ?
471 BEQ *+3
472 LSRA
473 JSR IPIHEX
474 JSR HWINDW
475 BEQ EOPSER
476 LDX #SRWORD
477 STA ,X+ longueur chaîne
478 LDB ,U+
479 STB ,X+ copie de la chaîne
480 DECA
481 BNE *-5
482 LDA $E7E5
483SRSUIV ANDA #$1F
484 JSR SEARCH
485 JSR GETC
486 CMPB #8 flèche gauche
487 BNE SR1
488 DECA
489 BRA SRSUIV
490SR1 CMPB #9 flèche droite
491 BNE SR2
492 INCA
493 BRA SRSUIV
494SR2 CMPB #13 touche Entrée
495 BNE ENDSR
496 CLRA
497 JSR SEARCH
498 BNE SRSUIV+5
499 INCA
500 CMPA #$1F
501 BLO *-8
502 BRA SRSUIV
503ENDSR CMPB #2 touche Stop
504 BNE SRSUIV+5
505 CLRA code retour=OK
506EOPSER RTS
507
508DMPTXT * option: dump de la mémoire
509 FCC "DUMP $@"
510 FDB 0,0
511OPDUMP LDA #4
512 JSR INPUT lecture correcte ?
513 JSR HWINDW fenêtre supérieure
514 BNE *+3
515 RTS sort ss rien faire
516 LEAY ,U
517DPSUIV JSR DUMP
518 JSR GETC
519 CMPB #10 flèche bas
520 BEQ DPSUIV
521 CMPB #11 flèche haut
522 BNE DMP1
523 LEAY -16,Y
524 BRA DPSUIV
525DMP1 CMPB #8 flèche gauche
526 BNE DMP2
527 LEAY -9,Y
528 BRA DPSUIV
529DMP2 CMPB #9 flèche droite
530 BNE DMP3
531 LEAY -7,Y
532 BRA DPSUIV
533DMP3 CMPB #13 touche Entrée
534 BNE DMP4
535DMPAGE LDX #SCREEN
536 STX <CURSOR
537 LDA #23 hauteur d'1 écran
538 STA <CMPT
539 JSR DUMP
540 DEC <CMPT
541 BNE *-5
542 BRA DPSUIV
543DMP4 CMPB #30 touche RetScreen
544 BNE DMP5
545 LEAY -48*8,Y
546 BRA DMPAGE
547DMP5 JSR FNCKIZ
548 BEQ DPSUIV
549ENDDMP CMPB #2 touche Stop = QUIT
550 BNE DPSUIV+3
551 LDU #OPDUMP-4 adresse courante
552 TFR Y,D du dump devient la
553 JSR ATOHEX valeur par défaut
554 TFR B,A
555 JSR ATOHEX
556 CLRA code retour=OK
557 RTS
558
559DESTXT * option: désassemblage mémoire
560 FCC "UNASSEMBLE $@"
561 FDB 0,0
562OPDESA LDA #4
563 JSR INPUT
564 JSR HWINDW fenêtre supérieure
565 BNE *+3 lecture correcte ?
566 RTS sort ss rien faire
567 LEAY ,U
568ASSUIV JSR DESASS
569 JSR GETC
570 CMPB #10 flèche bas
571 BEQ ASSUIV
572 CMPB #8 flèche gauche
573 BNE ASS1
574 LDY <FIRBYT
575 LEAY -1,Y
576 BRA ASSUIV
577ASS1 CMPB #9 flèche droite
578 BNE ASS2
579 LDY <FIRBYT
580 LEAY 1,Y
581 BRA ASSUIV
582ASS2 CMPB #13 touche Entrée
583 BNE ASS3
584 LDX #SCREEN
585 STX <CURSOR
586 LDA #23 hauteur d'1 écran
587 STA <CMPT
588 JSR DESASS
589 DEC <CMPT
590 BNE *-5
591 BRA ASSUIV
592ASS3 CMPB #30 touche "y sauter"
593 BNE ASS4
594 LDA <ADRMOD flag "peut sauter"
595 BNE ASSUIV+3
596 LDY <OPCODE ->adresse pointée
597 BRA ASSUIV
598ASS4 JSR FNCKIZ
599 BEQ ASSUIV
600ENDASS CMPB #2 touche Stop = QUIT
601 BNE ASSUIV+3
602 LDU #OPDESA-4 adresse courante
603 TFR Y,D du désa devient la
604 JSR ATOHEX valeur par défaut
605 TFR B,A
606 JSR ATOHEX
607 CLRA code retour=OK
608 RTS
609
610* A: numéro de la bank à parcourir
611SEARCH STA $E7E5
612 LDU #LINE
613 LDD #$423A début ligne "B: "
614 STD ,U++
615 LDB #32
616 STB ,U+
617 LDA $E7E5
618 JSR ATOHEX affiche la bank
619 LDA #27
620 STB ,U+ ligne vide...
621 DECA
622 BNE *-3 ...jusqu'à la
623 LDD #$6000 début de zone
624 PSHS D
625 JSR ATOHEX "6000 "
626 TFR B,A ..dernière colonne
627 JSR ATOHEX
628 LDD #$2020
629 STD ,U++
630 STD ,U
631 JSR DISLIN affiche première
632 LDU <CURSOR ligne et revient
633 LEAU -315,U au milieu de
634 STU <CURSOR celle-ci
635 LDA #5
636 STA <XPOS
637 LDU #SRWORD chaîne à trouver
638 LDB ,U+ longueur de chaîne
639 PULS X retrouve $6000=déb
640SRMEMO LDA $E7C8 clavier relâché ?
641 BEQ SRCONT
642 PSHS B
643 JSR GETC
644 CMPB #2 touche STOP
645 BNE *+6
646 LEAS 1,S
647 BRA SREND
648 CMPB #3 touche SHIFT+STOP
649 PULS B longueur > 0
650 BEQ SREND+1
651SRCONT LDA ,X+
652 CMPA ,U
653 BEQ CMPNXT
654SEARET CMPX #$E000
655 BNE SRMEMO
656SREND CLRB code "pas CNT-C"
657 PSHS X
658 LDX <CURSOR fin de recherche
659 LDA <XPOS
660 LEAX 1,X on va en bout de
661 INCA ligne
662 CMPA #36
663 BNE *-5
664 STA <XPOS et
665 STX <CURSOR
666 PULS A affiche "E000"
667 JSR DA2HEX
668 PULS A
669 JSR DA2HEX
670 LDA $E7E5
671 TSTB code CNT-C ou pas
672 RTS
673CMPNXT LEAY ,X
674 LEAU 1,U
675 DECB longueur chaîne
676 BEQ SRFUND
677 LDA ,X+
678 CMPA ,U+
679 BEQ *-8
680 LEAX ,Y
681 LDU #SRWORD
682 LDB ,U+
683 BRA SEARET
684SRFUND LDA <XPOS on a trouvé le mot
685 CMPA #30 fin de ligne ?
686 BLO SRDADR
687 PSHS X
688 LDA #39
689 STA <XPOS
690 LDX <CURSOR nouvelle ligne
691 LEAX 9,X
692 STX <CURSOR
693 LDD #$2920 remplie d'espaces
694 JSR PUTC
695 DECA
696 BNE *-4
697 LDX <CURSOR
698 LEAX -315,X on se place au
699 STX <CURSOR milieu de la ligne
700 LDA #5
701 STA <XPOS
702 PULS X
703SRDADR LDB #32
704 JSR PUTC
705 LDU #SRWORD
706 LDB ,U recule le pointeur
707 NEGB mémoire de la
708 SEX longueur du mot
709 LEAX D,X
710 TFR X,D et affiche cette
711 JSR DA2HEX adresse
712 TFR B,A
713 JSR DA2HEX
714 LEAX ,Y
715 LDB ,U+
716 JMP SEARET
717SRWORD FCB 1
718 FCC "SEARCHED PATTERN"
719 FDB 0,0,0,0,0,0,0,0
720
721* Y: pointe l'octet à DUMPer (DMPBYT) *
722DUMP LDU #LINE
723 LDX #LINE+30 place de l'ASCII
724 TFR Y,D
725 JSR ATOHEX affiche l'adresse
726 TFR B,A du début d'HEXDUMP
727 JSR ATOHEX
728 LDA #32
729 STA ,U+
730 LDB #8 octets traités
731HXDUMP LDA ,Y
732 JSR ATOHEX valeur en hexa
733 LDA #32
734 STA ,U+
735 LDA ,Y+
736 STA ,X+ équivalent ASCII
737 DECB
738 BNE HXDUMP
739 STY <DMPBYT
740 LDD #$2020
741 STA ,U
742 STD ,X
743 BRA DISLIN affiche la ligne
744
745* Y: pointe l'octet à décoder (CURBYT) *
746DESASS STY <FIRBYT sauve l'adresse du
747 LDU #LINE 1r oct désassemblé
748 TFR Y,D
749 JSR ATOHEX cette adresse
750 TFR B,A figurera en début
751 JSR ATOHEX de ligne
752 LDA #32
753 STA ,U+
754 JSR INSTR décode la commande
755 TSTA
756 BMI HEXDMP
757 BNE OPERAN
758 INC <ADRMOD flag "pas sauter!"
759 BRA HEXDMP
760
761OPERAN LDB #32 remplit d'espaces
762 STB ,U+ jusqu'à l'opérande
763 CMPU #LINE+11
764 BNE *-6
765 ANDA #15
766 LDX #OPECAS-2
767 JSR [A,X]
768
769HEXDMP LDB #32 remplit d'espaces
770 STB ,U+ jusqu'au hexdump
771 CMPU #LINE+30
772 BNE *-6
773 LDX <FIRBYT équivalent hexa
774 STY <CURBYT de tous les octets
775HEXEQU LDA ,X+ de l'instruction
776 JSR ATOHEX désassemblée
777 CMPX <CURBYT
778 BLO HEXEQU
779EOLASS CMPU #LINE+40 remplit d'espaces
780 BHS DISLIN de la fin du Dump
781 STB ,U+ au bout de ligne.
782 BRA EOLASS (= 40 caractères)
783DISLIN LDX #LINE affiche la ligne
784 LDA #40
785 LDB ,X+
786 JSR PUTC
787 DECA
788 BNE *-6
789 RTS
790OPECAS FDB IMMEDI,DIRECT,INDEXE
791 FDB ETENDU,RELATI,TRANSF,PILES
792
793IMMEDI LDB #'#
794 STB ,U+
795 LDA ,Y+
796 JSR ATOHEX
797 LDA <ADRMOD
798 BITA #16 opérande 8 bits ?
799 BNE *+3
800 RTS
801 LDA ,Y+
802 JMP ATOHEX
803
804DIRECT LDB #'<
805 STB ,U+
806 LDA ,Y+
807 JMP ATOHEX
808
809ETENDU LDB #'>
810 STB ,U+
811 LDA ,Y+
812 STA <OPCODE au cas où l'on
813 JSR ATOHEX
814 LDA ,Y+
815 STA <OPCODE+1 voudrait y aller
816 CLR <ADRMOD flag "peut sauter"
817 JMP ATOHEX
818
819IDX8 LDA #'- 8 bits , R
820 STA ,U
821 LDD ,Y++ on saute l'offset
822 EXG A,B
823 TSTA déplacement > 0 ?
824 BPL *+5
825 LEAU 1,U garde le signe "-"
826 NEGA et inverse déplac.
827 JSR ATOHEX
828 TFR B,A
829 BRA VIMADP virgule & registre
830IDX9 LDA ,Y+ 16 bits , R
831 PSHS A
832 LDD ,Y++ le déplacement
833 BPL IDXPOS est-il positif ?
834 STD <OPCODE
835 LDA #'- non: affiche "-"
836 STA ,U+
837 LDD #0 et inverse déplac.
838 SUBD <OPCODE
839IDXPOS JSR ATOHEX
840 TFR B,A
841 JSR ATOHEX
842 PULS A
843VIMADP LDB #', virgule & registre
844 STB ,U+
845 BRA IDXREG
846IDX11 LDA #'D D,R
847 STA ,U+
848 BRA VIRREG
849INDEXE LDA ,Y
850 BMI INDEX2 pas R+4 bits dépl.
851 BITA #16
852 BEQ *+7
853 LDB #'-
854 STB ,U+
855 NEGA
856 ANDA #31
857 CMPA #9
858 BHI *+8
859 ADDA #48
860 STA ,U+
861 BRA *+5
862 JSR ATOHEX écrit déplacament
863VIRREG LDA #',
864 STA ,U+
865PCKREG LDA ,Y+
866IDXREG ANDA #$60 décode et
867 LSRA écrit le registre
868 LSRA servant d'index
869 LSRA
870 LSRA
871 LSRA
872 LDX #IDXLRG liste de registres
873 LDA A,X
874 STA ,U+
875 RTS
876INDEX2 LDB ,Y
877 BITB #16
878 BEQ *+6
879 LDA #'[
880 STA ,U+
881 ANDB #15
882 ASLB
883 LDX #IDXCAS
884 JSR [B,X]
885 LDA LINE+11
886 CMPA #'[
887 BNE IDXCAS-1
888 LDD [DIR*256+OPCODE]
889 STD <OPCODE
890 LDA #']
891 STA ,U+
892 RTS
893IDXCAS FDB IDX0,IDX1,IDX2,IDX3,VIRREG
894 FDB IDX5,IDX6,IDXERR,IDX8,IDX9
895 FDB IDXERR,IDX11,IDX12,IDX13
896 FDB IDXERR,IDX15
897
898IDX0 BSR VIRREG ,R+
899 LDA #'+
900 STA ,U+
901 RTS
902IDX1 BSR VIRREG ,R++
903 LDD #$2B2B
904 STD ,U++
905 RTS
906IDX2 LDD #$2C2D ,-R
907 STD ,U++
908 BRA PCKREG
909IDX3 LDD #$2C2D ,--R
910 STD ,U++
911 STB ,U+
912 BRA PCKREG
913IDX5 LDA #'B B,R
914 STA ,U+
915 BRA VIRREG
916IDX6 LDA #'A A,R
917 STA ,U+
918 JMP VIRREG
919IDX12 LDD ,Y++ 8 bits , PCR
920 SEX
921IDXPCR LEAX D,Y
922 TFR X,D
923 STD <OPCODE si on veut y aller
924 CLR <ADRMOD flag "peut sauter"
925 JSR ATOHEX
926 TFR B,A
927 JSR ATOHEX
928 LDD #$2C50
929 STD ,U++
930 LDD #$4352
931 STD ,U++
932 RTS
933IDX13 LDA ,Y+ 16 bits , PCR
934 LDD ,Y++
935 BRA IDXPCR
936IDX15 LDA ,Y
937 BITA #16
938 BEQ IDXERR
939 LEAY 1,Y
940 LDA ,Y+
941 STA <OPCODE au cas où l'on
942 JSR ATOHEX
943 LDA ,Y+
944 STA <OPCODE+1 voudrait y aller
945 CLR <ADRMOD flag "peut sauter"
946 JMP ATOHEX
947IDXERR LDD #$3F3F
948 STD ,U++
949 RTS
950IDXLRG FCC "XYUS"
951
952RELATI LDA <ADRMOD
953 BITA #16 déplacement 8bits?
954 BNE RLWORD
955 LDB ,Y+
956 SEX
957 BRA *+4
958RLWORD LDD ,Y++
959 LEAX D,Y l'adresse pointée
960 STX <OPCODE au cas où l'on
961 LDA <OPCODE voudrait y aller
962 JSR ATOHEX
963 LDA <OPCODE+1
964 CLR <ADRMOD flag "peut sauter"
965 JMP ATOHEX
966
967TRANSF LDB ,Y
968 ANDB #$F0
969 LDX #TFXREG
970 LSRB 4bits poids fort
971 LSRB =reg "source"
972 LSRB
973 LDD B,X texte registre 1
974 CMPA #32
975 BEQ *+4
976 STA ,U+
977 STB ,U+
978 LDB #', la virgule sépare
979 STB ,U+
980 LDB ,Y+ 4bits poids faible
981 ANDB #15 =reg "destination"
982 ASLB
983 LDD B,X texte registre 2
984 CMPA #32
985 BEQ *+4
986 STA ,U+
987 STB ,U+
988 RTS
989
990TFXREG FCC " D X Y U SPC ? ? A BCCDP"
991 FCC " ? ? ? ?"
992
993PILES LDB #'S pile non utilisée
994 LDA <OPCODE+1
995 CMPA #$35
996 BHI *+4
997 LDB #'U
998 STB PILREG+3
999 LDB ,Y+
1000 BITA #1 empile-t-on ?
1001 BNE DEPILE-5
1002 LDX #PILREG liste de registres
1003 LDA #8 registres à tester
1004EMPILE ASLB
1005 BCC *+4
1006 BSR REGSEL valide registre
1007 LEAX 2,X
1008 DECA
1009 BNE EMPILE
1010ENDPIL LDA #32 efface la dernière
1011 STA ,-U virgule
1012 RTS
1013 LDX #PILREG+14
1014 LDA #8
1015DEPILE ASRB
1016 BCC *+4
1017 BSR REGSEL
1018 LEAX -2,X
1019 DECA
1020 BNE DEPILE
1021 BRA ENDPIL
1022REGSEL PSHS D ce registre est
1023 LDD ,X sélectionné
1024 CMPA #32
1025 BEQ *+4
1026 STA ,U+ on copie son nom
1027 STB ,U+
1028 LDA #',
1029 STA ,U+
1030 PULS D,PC
1031PILREG FCC "PC U Y XDP B ACC"
1032
1033
1034INSTR LDB ,Y+ décode instruction
1035 CMPB #$10 et renvoie le code
1036 BNE INSTR2 opérande dans A.
1037 STB <OPCODE opcode complexe 10
1038 LDX #MNEMO2
1039 BRA CMPLEX
1040INSTR2 CMPB #$11
1041 BNE INSTR3
1042 STB <OPCODE opcode complexe 11
1043 LDX #MNEMO3
1044CMPLEX LDB ,Y+
1045 BSR FNDCOD
1046 BPL *+4
1047 LEAY -1,Y A=-1: code inconnu
1048 RTS
1049INSTR3 LDX #MNEMO1 opcode simple (1o)
1050 CLR <OPCODE
1051FNDCOD STB <OPCODE+1 trouve txt+infos
1052FNDTXT LDD ,X++ correspondant à
1053 CMPD #$3F3F l'opcode cherché.
1054 BNE PAFIN1
1055 STD ,U++ code inconnu (??)
1056 LDA #-1
1057 RTS
1058PAFIN1 CMPA <OPCODE+1 trouvé l'opcode?
1059 BNE FNDTXT
1060 CMPB #$1F c'est un vrai ?
1061 BHI FNDTXT non:c'est du texte
1062 STB <ADRMOD
1063 LDD ,X++ on saute les
1064 CMPB #$1F autres adressages
1065 BLO *-4 de la Mnémonique.
1066 LEAX -2,X
1067 LDD ,X++ copie du texte
1068 STD ,U++
1069 LDD ,X++
1070 STD ,U++
1071 LDA <OPCODE+1
1072 CMPA #$1C l'exception: ANDCC
1073 BNE *+4
1074 STB ,U+
1075 LDA <ADRMOD
1076 RTS
Note: See TracBrowser for help on using the repository browser.