;================================= ; Version au 02/06/2018 ; JFC (pacman) ;################################# ; DONNEES VARIABLES ; ; Etat du lecteur de disque ? ; 1000 1 Derniere commande utilisee (Latest FDC command) ; 1001 1 Drapeau d'etat du moteur + LED (Motor on flag, 01 = on, 00 = off) ; 1002 4 Drapeau d'etat de la piste 0 pour chaque peripherique (Track 0 flags for each drive) (1-4) ; 1006 1 Comptage des essais successifs (Retry count) ; 1007 1 Not sure of this one? ; 1008 1 Numero du peripherique (Drive Number) (0 a 3) ; 1009 2 Numero de secteur logique (Logical Sector Number) (0 a 1279) ; 100B 1 Nombre d'octets lus sur 1 octet (Bytes to read) (after all sectors are read) ; 100C 1 Nombre de secteurs lus (Number of sectors to read) ; ou ; 100B 2 Nombre d'octets lus sur 2 octets (Bytes to read) ; 100D 2 Adresse memoire de chargement des donnees en memoire (Memory Load address) ; 100F 1 Numero de piste courante (Current track No.) (0 a 69) ; 1010 1 Numero de secteur courant (Current Sector No.) (1 a 16) ; 1011 1 Numero de debut de piste (Start track No.) (0 a 69) ; 1012 1 Numero de debut de secteur (Start Sector No.) (1 a 16) ; Caracteristique du disque ? ; 1013 1 Sauvegarde du Status Register (Read Port D8h) ; 1014 1 ; 1015 1 Nombre de tete du disque (0 ou 1) ; 1016 1 ; 1017 1 --\ ; 1018 1 \ ; 1019 1 \ ; 101A 2 --> Stockage de la table de 8 donnees ; 101C 1 / de l'adresse de depart F01Dh ; 101D 1 / ; 101E 1 --/ ; 101F 1 ; 1020 2 ; 1022 1 ; 1023 2 Sauvegarde de IY ; 1025 2 Sauvegarde de SP ; 1027 2 Adresse d'execution du programme ; 1029 2 Sauvegarde de SP ; 102B 1 ; 102C 2 Numero de secteur logique (Logical Sector Number) ; 102E 1 Affichage sur ecran (0) ou imprimante (1) ; 102F ; 1030 ; 1031 1 ; 11A3 81 Buffer d'entree clavier de 81 octets du moniteur systeme ; Registres de controle ; D8 Registre de commande (Command Register) (write) ; D8 Registre de status (Status Register) (read) ; D9 Registre de piste (Track Register) (write) : DA Registre de secteur (Sector Register) (write) : DB Registre de donnee (Data Register) (read/write) ; DC Registre de selection de peripherique (Drive/Motor select) (write) ; DD Registre de selection de face/tete (Side/Head select) (write) ; Index ; IX = 1008h ; IY = 1014h ;################################# ; Debut de la ROM ; f000: 00 nop ; Declaration de l'interface au moniteur f001: c3 f0 f7 jp f7f0h ; Initialisation Puis Boot Drive f004: c3 11 f5 jp f511h ; Drive Boot f007: c3 6a f0 jp f06ah ; Mise en marche Moteur+LED f00a: c3 5d f0 jp f05dh ; Arret moteur f00d: c3 b5 f0 jp f0b5h ; Lecture f010: c3 54 f1 jp f154h ; Ecriture f013: c3 69 f0 jp f069h ; Aucune fonction f016: c3 7e f5 jp f57eh ; Mini DOS ; ;################################# ;################################# ; Table de donnees 1 ; f019: 23 28 4d 50 ;################################# ;################################# ; Table de donnees 2 ; ; Adresse de stockage 10xxh ; ; 17 18 19 1A 1B 1C 1D 1E ; | | | | | | | ; | | | | | | ; | | | | | Head track-to-track stepping rates (00b=6ms ; 11b=30ms) ; | | | | ; | | | ; | | ; | ; Nombre de secteurs par piste ; f01d: 10 02 01 ff 00 03 ff ff 11 02 01 ff 00 00 ff ff 12 02 01 ff 00 00 ff ff 0a 04 02 ff 01 00 ff ff 05 08 03 ff 03 00 ff ff 1c 01 00 7f 00 00 ff ff 1b 01 00 7f 00 00 ff ff 1a 01 00 7f 00 00 ff ff ;################################# ;################################# ; Arret Moteur et reinitialisation ; des valeurs entre 1001h et 1005h ; f05d: af xor a ; A <- 00h f05e: d3 dc out (dch),a ; Arret moteur + LED (DCh) <- 00h f060: 06 05 ld b,05h ; B <- Nombre d'adresses a reinitialiser (05h) f062: 21 01 10 ld hl,1001h ; HL <- Adresse de depart : 1001h ; ;# Debut de la boucle : rempli les ;# adresses 1001h a 1006h a 0 ; f065: 77 ld (hl),a ; (HL) <- 00h (1001h-1006h) <- 00h f066: 23 inc hl ; HL++ f067: 10 fc djnz fch ; Boucle : B-- Si B<>0 Alors va en F065h f069: c9 ret ; ;################################# ;################################# ; ; f06a: ed 73 25 10 ld (1025h),sp ; Sauvegarde SP en (1025h-1026h) f06e: cd e7 f1 call f1e7h ; Call F1E7h ( ; ;# Mise en rotation du moteur ; f071: 3a 01 10 ld a,(1001h) ; Retrouve l'etat du moteur f074: b7 or a ; Test si etat a 0 f075: cc a5 f0 call z,f0a5h ; Si le moteur ne tourne pas alors mise en rotation (F0A5h) f078: dd 7e 00 ld a,(ix+00h) ; A <- (IX+00h) (1008h) (Drive select (0-3)) f07b: f6 84 or 84h ; A <- A OR 84h (10000100b) (On ajoute Motor ON + LED) f07d: d3 dc out (dch),a ; Envoi de la commande Moteur (Motor ON + LED + Drive Select) f07f: af xor a ; a <- 0 f080: 32 00 10 ld (1000h),a ; Stockage de la commande (1000h) <- A f083: 21 00 00 ld hl,0000h ; HL <- 0000h (Nombre d'essais = $FFFF (TimeOut)) ; ;# Attente que le moteur tourne : ;# Attente que le Bit 7 du Status ;# soit a 1 et effectue $FFFF tests max ; f086: 2b dec hl ; HL-- f087: 7c ld a,h ; A <- H f088: b5 or l ; A <- A OR L (Test si HL=0) f089: ca 3b f4 jp z,f43bh ; Si A = 0 Alors Va en F43Bh (HL=0 TimeOut -> Disk Error) f08c: db d8 in a,(d8h) ; Read Status f08e: 07 rlca ; Bit 7 -> C f08f: 30 f5 jr nc,f5h ; Si CARRY=0 Alors Va En F086h (Attente Motor ON ? Bit 7=1) ; ;# ; f091: dd 4e 00 ld c,(ix+00h) ; C <- Retrouve le n° de peripherique (C <- (1008h)) f094: 21 02 10 ld hl,1002h ; HL <- Adresse de depart de l'etat des peripheriques (1002h) f097: 06 00 ld b,00h ; B <- 0 (BC=) f099: 09 add hl,bc ; HL <- HL + BC (Adresse de l'etat du disque selectionne) f09a: af xor a ; A <- 0 f09b: b6 or (hl) ; A <- A OR (hl) (Piste pour disque selectionne) f09c: d3 d9 out (d9h),a ; Positionne le registre piste sur le peripherique f09e: c0 ret nz ; Si A <> 0 Alors RETOUR f09f: cd d2 f3 call f3d2h ; APPELLE F3D2h f0a2: 36 ff ld (hl),ffh ; (Positionne l'etat du peripherique selectionne (1002h+BC) <- FFh) f0a4: c9 ret ; ;################################# ;################################# ; Mise en route du Moteur avec ; boucle d'attente ; f0a5: 3e 80 ld a,80h ; A <- 80h (10000000b) f0a7: d3 dc out (dch),a ; Port DCh <- 80h (Motor ON) f0a9: 06 10 ld b,10h ; On fait 16 fois la Grande boucle d'attente ; ;# Boucle ; f0ab: cd bd f3 call f3bdh ; Grande boucle d'attente f0ae: 10 fb djnz fbh ; Boucle : B-- Si B > 0 Alors va en f0ab ; f0b0: 3c inc a ; A <- 0+1 = 01h f0b1: 32 01 10 ld (1001h),a ; Sauvegarde l'etat du moteur (Motor flag (1001h) <= 01h) f0b4: c9 ret ; ;################################# ;################################# ; Entree de la procedure de lecture ; des donnees sur disque ; f0b5: ed 73 25 10 ld (1025h),sp ; Sauvegarde de SP en (1025h-1026h) f0b9: 21 fc d7 ld hl,d7fch ; HL <- Adresse memoire video de stockage de 4 valeurs : D7FCh f0bc: 1e 02 ld e,02h ; E <- 02h f0be: cd ec f1 call f1ech ; Preparation des donnees en memoire des variables (1017h->1021h) f0c1: cd 20 f1 call f120h ; Converti le N° du secteur logique en piste (track) et secteur (sector) ; ;# Bouclage tant que le status n'est pas 99h ; f0c4: cd 49 f2 call f249h ; Commandes RESTORE + SEEK f0c7: cd 91 f2 call f291h ; Positionne le N° de Face contenu dans A du disque sur port (DDh) f0ca: cd 64 f3 call f364h ; Commande SEEK f0cd: 20 4c jr nz,4ch ; Si retour non nul Alors va en F11Bh ; f0cf: cd b1 f2 call f2b1h ; Positionne Track et Sector Registers f0d2: f3 di f0d3: d9 exx ; BC<->BC' DE<>DE' HL<>-HL' f0d4: 11 02 03 ld de,0302h ; D <- 03h et E <- 02h pour test bit 0 et 1 et valeur a obtenir pour bouclage f0d7: 3e 94 ld a,94h ; Commande de lecture (10010100b) (Read Sector+Force interrupt+30ms delay+6ms stepping rate) f0d9: d9 exx ; BC<->BC' DE<>DE' HL<>-HL' f0da: cd 90 f3 call f390h ; Envoi la commande et attend que le status change f0dd: d9 exx ; BC<->BC' DE<>DE' HL<>-HL' f0de: ed 4b 20 10 ld bc,(1020h) ; BC recoit la taille a charger ; ;# Boucle d'attente de la mise a ;# disposition d'une donnee ; f0e2: db d8 in a,(d8h) ; lecture du status f0e4: a2 and d ; A <- A And D (A And $03h : Ne garde que les Bit 0 et Bit 1) f0e5: bb cp e ; A = E ? (A = 02h i.e. Bit 1=1) f0e6: ca e2 f0 jp z,f0e2h ; Si oui Alors Boucle ; ;# Lecture d'une donnee et bouclage ;# si la taille n'est pas atteinte ; f0e9: db db in a,(dbh) ; Lecture d'une donnee f0eb: 77 ld (hl),a ; Stockage de la donnee en memoire (HL) f0ec: 23 inc hl ; HL++ f0ed: 0b dec bc ; BC-- f0ee: 78 ld a,b ; A <- B f0ef: b1 or c ; A <- A Or C (Test si BC = 0) f0f0: 20 f0 jr nz,f0h ; SI BC <> 0 (Pas fini) Alors va en F0E2h ; f0f2: dd 34 08 inc (ix+08h) f0f5: dd 7e 08 ld a,(ix+08h) f0f8: fd be 0b cp (iy+0bh) f0fb: d9 exx f0fc: 28 04 jr z,04h f0fe: 15 dec d f0ff: 20 dc jr nz,dch f101: 3e 15 ld a,15h f103: cd 82 f3 call f382h f106: fb ei f107: db d8 in a,(d8h) f109: 2f cpl f10a: 32 13 10 ld (1013h),a f10d: b7 or a f10e: 20 0b jr nz,0bh f110: cd c6 f2 call f2c6h f113: ca cf f1 jp z,f1cfh f116: dd 7e 07 ld a,(ix+07h) f119: 18 ac jr ach ; ;################################# ;################################# ; f11b: cd c8 f3 call f3c8h ; Appelle F3C8h f11e: 18 a4 jr a4h ; Va en F0C4h ; ;################################# ;################################# ; Converti le N° du secteur logique ; (Logical Sector Number 1009h-100Ah) ; en piste (track) et secteur (sector) ; (Track 1011h) (Sector 1012h) ; f120: 3e 03 ld a,03h ; A <- Nombre d'essai a 03h f122: 32 06 10 ld (1006h),a ; Stocke en (1006h) (Retry Count) f125: af xor a ; A <- 0 f126: 47 ld b,a ; B <- A f127: 57 ld d,a ; D <- A f128: fd 5e 03 ld e,(iy+03h) ; E <- (IY+03h) (DE contient le nombre de secteur par piste) f12b: dd 6e 01 ld l,(ix+01h) ; L <- (IX+01h) f12e: dd 66 02 ld h,(ix+02h) ; H <- (IX+02h) (HL contient le N° du secteur logique) ; ;# Boucle ; f131: ed 52 sbc hl,de ; Soustrait HL avec DE f133: 38 03 jr c,03h ; Si negatif alors valeur trouvee ; ;# On incremente B dans la boucle ; f135: 04 inc b ; Sinon incremente le N° de la piste f136: 18 f9 jr f9h ; Boucle vers F131h ; ;# Fin de boucle ; f138: 19 add hl,de ; HL <- HL + DE f139: 2c inc l ; Correction du N° de secteur (+1) f13a: dd 70 09 ld (ix+09h),b ; (IX+09h) <- B (Stockage du N° de piste) f13d: dd 75 0a ld (ix+0ah),l ; (IX+0Ah) <- L (Stockage du N° de secteur) f140: c9 ret ; ;################################# ;################################# ; Test et lecture de la taille du ; programme et stockage de la valeur ; f141: cd db f5 call f5dbh ; Call F5DBh (Lecture de l'adresse dans HL) ; ; Stockage de la taille ; f144: dd 75 03 ld (ix+03h),l ; (IX+03h) <- L (100Bh) <- L Bytes to read f147: dd 74 04 ld (ix+04h),h ; (IX+04h) <- H (100Ch) <- H Bytes to read f14a: c9 ret ; ;################################# ;################################# ; DB f14b: 4b 20 26 20 50 0d K & P ; ;################################# ;################################# ; Procedure d'arret du moteur ; f151: c3 5d f0 jp f05dh ; Va en F05Dh ; ;################################# ;################################# ; Entree de la procedure d'ecriture ; des donnees sur disque ; f154: ed 73 25 10 ld (1025h),sp f158: cd e7 f1 call f1e7h f15b: cd 0b f4 call f40bh f15e: cd 20 f1 call f120h ; Converti le N° du secteur logique en piste (track) et secteur (sector) f161: cd 49 f2 call f249h f164: cd 91 f2 call f291h ; Positionne le N° de Face contenu dans A du disque sur port (DDh) f167: cd 64 f3 call f364h f16a: c2 c4 f1 jp nz,f1c4h f16d: cd b1 f2 call f2b1h f170: f3 di f171: d9 exx f172: 11 02 03 ld de,0302h f175: 3e b4 ld a,b4h f177: d9 exx f178: cd 90 f3 call f390h f17b: d9 exx f17c: ed 4b 20 10 ld bc,(1020h) ;# f180: db d8 in a,(d8h) ; A <- Port D8h (Status Register) f182: a2 and d ; A <- A And D (test d'un bit) f183: bb cp e ; A = E ? f184: ca 80 f1 jp z,f180h ; Si Oui Alors va en F180h (Attente) f187: 7e ld a,(hl) ; A <- (HL) f188: d3 db out (dbh),a ; Ecrit A dans la donnee disque (DBh) <- A f18a: 23 inc hl ; HL++ f18b: 0b dec bc ; BC-- f18c: 78 ld a,b ; A <- B f18d: b1 or c ; A <- A Or C f18e: c2 80 f1 jp nz,f180h ; Si BC <> 0 Alors va en F180h (Pas fini) f191: dd 34 08 inc (ix+08h) f194: dd 7e 08 ld a,(ix+08h) f197: fd be 0b cp (iy+0bh) f19a: d9 exx f19b: 28 04 jr z,04h f19d: 15 dec d f19e: 20 db jr nz,dbh f1a0: 3e 15 ld a,15h f1a2: cd 82 f3 call f382h f1a5: fb ei f1a6: db d8 in a,(d8h) f1a8: 2f cpl f1a9: 32 13 10 ld (1013h),a f1ac: fe 40 cp 40h f1ae: ca df f3 jp z,f3dfh f1b1: b7 or a f1b2: 20 10 jr nz,10h f1b4: cd c6 f2 call f2c6h f1b7: 18 04 jr 04h f1b9: af xor a f1ba: c3 b5 f0 jp f0b5h ; ;################################# ;################################# ; f1bd: 20 0b jr nz,0bh ; Si non 0 Alors va en F1CAh f1bf: cd d9 f2 call f2d9h f1c2: 30 0e jr nc,0eh f1c4: cd c8 f3 call f3c8h f1c7: c3 61 f1 jp f161h ; ;################################# ;################################# ; f1ca: dd 7e 07 ld a,(ix+07h) f1cd: 18 95 jr 95h f1cf: cd 0b f4 call f40bh f1d2: dd 4e 00 ld c,(ix+00h) f1d5: 06 00 ld b,00h f1d7: 21 02 10 ld hl,1002h f1da: 09 add hl,bc f1db: db d9 in a,(d9h) f1dd: 77 ld (hl),a f1de: 3e 80 ld a,80h f1e0: d3 dc out (dch),a f1e2: fd 2a 23 10 ld iy,(1023h) f1e6: c9 ret ; ;################################# ;################################# ; Stockage de la table de donnees ; de 8 valeurs ; f1e7: 21 fc df ld hl,dffch ; HL <- Adresse de stockage en memoire de 4 octets) (DFFCh) f1ea: 1e 73 ld e,73h ; E <- 73h (01110011b) ;# ; Preparation des donnees dans la zone ; de stockage ; f1ec: fd 22 23 10 ld (1023h),iy ; Sauvegarde de l'index IY en (1023h) <- IY f1f0: fd 21 14 10 ld iy,1014h ; IY <- Adresse des donnees des caracteristiques disque (1014h) f1f4: dd 4e 00 ld c,(ix+00h) ; C <- Retrouve le n° du peripherique (1008h) compris entre 0 et 3 f1f7: 06 00 ld b,00h ; B <- 00h f1f9: 09 add hl,bc ; HL <- HL + BC (BC compris entre 0 et 3 donc HL entre DFFCh et DFFFh) f1fa: 7e ld a,(hl) ; A <- Retrouve la valeur associe au peripherique f1fb: ab xor e ; A <- A XOR E f1fc: fd 77 00 ld (iy+00h),a ; (IY+00h) <- A (1014h) <- A f1ff: 57 ld d,a ; D <- A f200: e6 02 and 02h ; A <- A AND 02h (00000010b) f202: 0e 01 ld c,01h ; C <- 01h f204: 20 01 jr nz,01h ; Si Bit 1 de A <> 0 Alors Va en F207h f206: 0d dec c ; C-- f207: fd 71 01 ld (iy+01h),c ; (IY+01h) <- C (1015h) <- C f20a: 7a ld a,d ; A <- D f20b: e6 0c and 0ch ; A <- A AND C (00001100b) f20d: cb 3f srl a ; Bit 2 -> Bit 1 et Bit 3 -> Bit 2 f20f: cb 3f srl a ; Bit 1 -> Bit 0 et Bit 2 -> Bit 1 f211: 4f ld c,a ; C <- A (C compris entre 00b et 11b soit 0 et 3) f212: 21 19 f0 ld hl,f019h ; HL <- F019h (Table de 4 donnees 23 28 4C 50) f215: 09 add hl,bc ; HL <- HL + BC (BC compris entre 0 et 3 car B=0) f216: 7e ld a,(hl) ; Charge une donnee de la table f217: fd cb 01 46 bit 0,(iy+01h) ; Test du Bit 0 de (1015h) f21b: 28 01 jr z,01h ; Si Bit a 0 Alors va en F21Eh f21d: 87 add a,a ; Sinon A <- A + A ;# f21e: fd 77 02 ld (iy+02h),a ; (IY+02h) <- A (1016h) <- A f221: 7a ld a,d ; A <- D f222: e6 70 and 70h ; A <- A And 70h (01110000b) f224: cb 3f srl a ; Bit 0 de A -> CARRY et A <- A / 2 f226: 21 1d f0 ld hl,f01dh ; HL <- F01Dh (Table de 8 donnees : 10 02 01 ff 00 03 ff ff) f229: 4f ld c,a ; C <- A f22a: 09 add hl,bc ; HL <- HL + BC (BC=A) f22b: 06 08 ld b,08h ; B <- Nombre de donnees de la table a lire (08h) ; ;# Debut boucle de lecture des donnees ; f22d: 7e ld a,(hl) ; Charge une donnee de la table f22e: 23 inc hl ; HL++ f22f: fd 77 03 ld (iy+03h),a ; (IY+03h) <- A (Stocke les donnees dans 1017h a 101Eh) f232: fd 23 inc iy ; IY++ f234: 10 f7 djnz f7h ; Boucle : B-- Si B<>0 Alors va en F22Dh ; ;# ; f236: fd 21 14 10 ld iy,1014h ; IY <- Repositionne au debut des donnees (1014h) f23a: 3a 17 10 ld a,(1017h) ; A <- Lit la premiere valeur : (1017h) f23d: 3c inc a ; Incremente la valeur lue f23e: 32 1f 10 ld (101fh),a  ; Recopie la valeur en (101Fh) (1017h=11h) f241: 2a 1a 10 ld hl,(101ah) ; HL <- Lit la premiere valeur en (101Ah-101Bh) f244: 23 inc hl ; Incremente la valeur lue f245: 22 20 10 ld (1020h),hl ; Sauvegarde la valeur lue dans (1020h-1021h) (1020h-1021h=0100h) f248: c9 ret ; ;################################# ;################################# ; Positionne la piste et le secteur ; courant ainsi que l'adresse de ; chargement en memoire (dans HL') ; f249: cd 61 f2 call f261h f24c: dd 7e 0a ld a,(ix+0ah) ; A <- N° de Secteur de depart (1012h) f24f: dd 77 08 ld (ix+08h),a ; Stockage dans le secteur courant (1010h) f252: dd 7e 09 ld a,(ix+09h) ; A <- N° de Piste de depart (1011h) f255: dd 77 07 ld (ix+07h),a ; Stockage dans la piste courante (100Fh) f258: d9 exx ; BC<->BC' DE<->DE' HL<>-HL' f259: dd 6e 05 ld l,(ix+05h) f25c: dd 66 06 ld h,(ix+06h) ; HL <- Adresse de chargement en memoire (100Dh-100Eh) f25f: d9 exx ; BC<->BC' DE<->DE' HL<>-HL' (Stockage dans HL' de l'adresse) f260: c9 ret ; ;################################# ;################################# ; f261: cd 71 f0 call f071h ; Applique un Restore + Seek ; ;# ; f264: cd 75 f2 call f275h f267: 3e 09 ld a,09h f269: fd 96 05 sub (iy+05h) f26c: 47 ld b,a ; ;# Boucle ; f26d: cb 22 sla d ; D <- D * 2 f26f: cb 13 rl e ; E <- E * 2 f271: 10 fa djnz fah ; B-- Si B<>0 Alors Va en F26Dh ; f273: 53 ld d,e f274: c9 ret ; ;################################# ;################################# ; f275: dd 6e 03 ld l,(ix+03h) ; L <- (IX+03h) (100Bh) (Bytes to Read) f278: dd 66 04 ld h,(ix+04h) ; H <- (IX+04h) (100Ch) (Bytes to Read) f27b: ed 5b 1a 10 ld de,(101ah) ; DE <- (101Ah) f27f: 7a ld a,d ; A <- D f280: 2f cpl ; A <- INVERT (A) f281: a4 and h ; A <- A And H f282: 57 ld d,a ; D <- A f283: 7b ld a,e ; A <- E f284: 2f cpl ; A <- INVERT (A) f285: a5 and l ; A <- A And L f286: 5f ld e,a ; E <- A f287: ed 52 sbc hl,de ; HL <- HL - DE -(CARRY) f289: c8 ret z ; Si HL = 0 Alors RETOUR f28a: 2a 20 10 ld hl,(1020h) ; HL <- (1020h) f28d: 19 add hl,de ; HL <- HL + DE f28e: eb ex de,hl ; DE <-> HL f28f: c9 ret ; ;################################# ;################################# ; Positionne le N° de Face ou de Tete ; du disque sur port (DDh) ; ;# Entree avec initialisation de A a 0 ; f290: af xor a ; A <- 0 ; ;# Entree avec A deja initialise ; f291: 32 22 10 ld (1022h),a ; Sauvegarde de A (1022h) <- A f294: 3a 15 10 ld a,(1015h) ; A <- (1015h) f297: b7 or a ; Test si A = 0 f298: 3a 22 10 ld a,(1022h) ; Retrouve la valeur de A (A <- (1022h)) f29b: 28 02 jr z,02h ; Si (1015h) = 0 Alors va en F29Fh f29d: cb 3f srl a ; Bit 0 de A -> CARRY ;# f29f: 2f cpl ; A <- INVERT (A) f2a0: d3 db out (dbh),a ; Ecrit A dans la donnee disque (DBh) <- A f2a2: 30 04 jr nc,04h ; Si C = 0 Alors va en F2A8h (on positionne A = 1) ;# ;# Positionne A a 0 Tete a 0 ; f2a4: 3e 00 ld a,00h ; A <- 00h f2a6: 18 02 jr 02h ; Va en F2AAh (Fin) ;# ;# Positionne A a 1 Tete a 1 ; f2a8: 3e 01 ld a,01h ; A <- 01h ;# f2aa: fd ae 01 xor (iy+01h) ; A <- A Xor (1015h) (IY+01h) f2ad: 2f cpl ; A <- INVERT (A) f2ae: d3 dd out (ddh),a ; Positionne le N° de tete du disque (DDh) <- A f2b0: c9 ret ; ;################################# ;################################# ; Positionne la piste et le sectreur ; dans les registres disque ; ;# f2b1: 3a 15 10 ld a,(1015h) ; A <- Nombre de tete du disque (1015h) f2b4: b7 or a ; Test si 0 (A <- A Or A) f2b5: dd 7e 07 ld a,(ix+07h) ; A <- Numero de piste courante (IX+07h=100Fh : Current Track) f2b8: 28 02 jr z,02h ; Si Nombre de tete = 0 Alors va en F2BCh ;# f2ba: cb 3f srl a ; Bit 0 de (IX+07h) -> C ;# f2bc: 2f cpl ; A <- INVERT (A) f2bd: d3 d9 out (d9h),a ; Ecrit dans le registre de piste la valeur de A ((D9h) <- A) (Track Register) f2bf: dd 7e 08 ld a,(ix+08h) ; Lecture du secteur courant (IX+08h=1010h : Current Sector) f2c2: 2f cpl ; A <- INVERT (A) f2c3: d3 da out (dah),a ; Ecriture dans le registre de secteur la valeur de A ((DAh) <- A) (Sector Register) f2c5: c9 ret ; ;################################# ;################################# ; f2c6: dd 7e 08 ld a,(ix+08h) ; A <- Lecture du secteur courant (IX+08H) (1010h : Current Sector) f2c9: fd be 0b cp (iy+0bh) ; A = (IY+0Bh=101Fh) ? f2cc: 20 08 jr nz,08h ; Si Non Alors va en F2D6h ;# f2ce: 3e 01 ld a,01h ; A <- 01h f2d0: dd 77 08 ld (ix+08h),a ; Positionne le numero de secteur courant a 1 (IX+08h=1010h) <- A f2d3: dd 34 07 inc (ix+07h) ; Incremente le numero de piste courant (IX+07h=100Fh)++ ;# f2d6: 7a ld a,d ; A <- D f2d7: b7 or a ; A <- A Or A (Test si 0) f2d8: c9 ret ;################################# ; f2d9: cd 25 f1 call f125h f2dc: 3e 02 ld a,02h f2de: 32 07 10 ld (1007h),a f2e1: cd 61 f2 call f261h f2e4: cd 58 f2 call f258h f2e7: dd 6e 0a ld l,(ix+0ah) f2ea: dd 66 09 ld h,(ix+09h) f2ed: 7c ld a,h f2ee: cd 91 f2 call f291h ; Positionne le N° de Face contenu dans A du disque sur port (DDh) f2f1: cd 64 f3 call f364h f2f4: 20 5f jr nz,5fh f2f6: 3a 15 10 ld a,(1015h) f2f9: b7 or a f2fa: 7c ld a,h f2fb: 28 02 jr z,02h f2fd: cb 3f srl a f2ff: 2f cpl f300: d3 d9 out (d9h),a f302: 7d ld a,l f303: 2f cpl f304: d3 da out (dah),a f306: f3 di f307: d9 exx f308: 3e e9 ld a,e9h f30a: 11 02 03 ld de,0302h f30d: 3e 94 ld a,94h f30f: d9 exx f310: cd 90 f3 call f390h f313: d9 exx f314: ed 4b 20 10 ld bc,(1020h) f318: db d8 in a,(d8h) f31a: a2 and d f31b: bb cp e f31c: ca 18 f3 jp z,f318h f31f: db db in a,(dbh) ; Lecture d'une donnee f321: be cp (hl) f322: 23 inc hl f323: 20 30 jr nz,30h f325: 0b dec bc f326: 78 ld a,b f327: b1 or c f328: c2 18 f3 jp nz,f318h f32b: d9 exx f32c: 2c inc l f32d: 7d ld a,l f32e: fd be 0b cp (iy+0bh) f331: 28 04 jr z,04h f333: 15 dec d f334: 20 dd jr nz,ddh f336: 3e 15 ld a,15h f338: cd 82 f3 call f382h f33b: fb ei f33c: db d8 in a,(d8h) f33e: 2f cpl f33f: 32 13 10 ld (1013h),a f342: e6 ff and ffh f344: 20 0f jr nz,0fh f346: 7d ld a,l f347: fd be 0b cp (iy+0bh) f34a: 20 03 jr nz,03h f34c: 2e 01 ld l,01h f34e: 24 inc h f34f: 7a ld a,d f350: b7 or a f351: c8 ret z f352: 7c ld a,h f353: 18 99 jr 99h f355: 3a 07 10 ld a,(1007h) f358: 3d dec a f359: 32 07 10 ld (1007h),a f35c: 37 scf f35d: c8 ret z f35e: cd d2 f3 call f3d2h f361: c3 e1 f2 jp f2e1h ; ;################################# ;################################# ; f364: 3e 18 ld a,18h ; Commande 18h (00011000b) f366: fd b6 08 or (iy+08h) ; Commande 1Bh (00011011b) SEEK A <- A Or (IY+08h) (Ajoute 03h Bit 0+1+2 dans la commande) f369: cd 6f f3 call f36fh ; Applique la Commande (1000h) et retourne le Status dans (1013h) f36c: e6 99 and 99h ; A <- A And 99h (10011001b) Applique sur le status. Si OK alors A=18h f36e: c9 ret ; ;################################# ;################################# ; Applique la Commande (1000h) et ; retourne le Status dans (1013h) ; f36f: 32 00 10 ld (1000h),a ; (1000h) <- A (Latest FDC Command) f372: 2f cpl ; A <- INVERT(A) f373: d3 d8 out (d8h),a ; Port D8h <- A (Command Register) f375: cd 8b f3 call f38bh ; Attend le bit 0 du port D8h a 1 f378: cd bd f3 call f3bdh ; Grande boucle d'attente f37b: db d8 in a,(d8h) ; A <- Port D8h (Status Register) f37d: 2f cpl ; A <- INVERT (A) f37e: 32 13 10 ld (1013h),a ; (1013h) <- A f381: c9 ret ; ;################################# ;################################# ; Interrompt la commande precedente ; par envoi d'un Force Interrupt ; f382: db d8 in a,(d8h) ; A <- Port D8h (Status Register) f384: 0f rrca ; C <- Bit 0 f385: d8 ret c ; Si Bit 0 = 1 Alors RETOUR (BUSY) f386: 3e d8 ld a,d8h ; A <- D8h (11011000b) (Force Interrupt to Interrupt on not ready to ready transition) f388: 2f cpl ; A <- INVERT (A) (00100111b) f389: d3 d8 out (d8h),a ; Port D8h <- A ;# ; Positionne le test du bit 0 ; du Port D8h a 0 f38b: d5 push de f38c: 16 00 ld d,00h ; D <- 00h (Test du Bit 0 a 1) f38e: 18 09 jr 09h ; Va en F399h f390: 32 00 10 ld (1000h),a ; (1000h) <- A (Latest FDC Command) f393: 2f cpl ; A <- INVERT (A) f394: d3 d8 out (d8h),a ; Port D8h <- A (Command Register) ;# ; Positionne le test du bit 0 du Port D8h a 1 f396: d5 push de f397: 16 01 ld d,01h ; D <- 01h (Test du Bit 0 a 0) ;# f399: e5 push hl f39a: cd b7 f3 call f3b7h ; Petite boucle d'attente f39d: 1e 10 ld e,10h ; E <- 10h ;# f39f: 21 00 00 ld hl,0000h ; HL <- 0000h ; ;# Boucle d'attente que Bit 0=D du status ; f3a2: 2b dec hl ; HL-- f3a3: 7c ld a,h ; A <- H f3a4: b5 or l ; A <- A Or L f3a5: 28 0a jr z,0ah ; Si HL = 0 Alors va en F3AEh f3a7: db d8 in a,(d8h) ; A <- Port D8h (Status Register) f3a9: e6 01 and 01h ; A <- A And 01h (Test Bit 0) f3ab: aa xor d ; A <- A Xor D (Test du Bit 0 = D ?) f3ac: 28 f4 jr z,f4h ; Boucle Si A = 0 (Bit 0=D) ALors va en F3A2h ; f3ae: e1 pop hl ; Sortie f3af: d1 pop de f3b0: c9 ret ; ;################################# ;################################# ; f3b1: 1d dec e ; E-- f3b2: 20 eb jr nz,ebh ; Si E <> 0 Alors va en F39Fh (Boucle d'attente) f3b4: c3 37 f4 jp f437h ; Va en F437h ;################################# ; Boucles d'attente ; Attente depend de la valeur de DE ; Petite attente DE=0006h (temps a calculer) ; f3b7: d5 push de f3b8: 11 06 00 ld de,0006h ; DE <- 0006h f3bb: 18 04 jr 04h ; Va en f3c1h ; ; Grande attente DE=2006h (temps a calculer) ; f3bd: d5 push de f3be: 11 06 20 ld de,2006h ; DE <- 2006h ; ; Boucle elle-meme ; f3c1: 1b dec de ; DE-- f3c2: 7a ld a,d ; A <- D f3c3: b3 or e ; A <- A Or E f3c4: 20 fb jr nz,fbh ; Si A <> 0 Alors va en F3C1h f3c6: d1 pop de f3c7: c9 ret ; ;################################# ;################################# ; f3c8: 3a 06 10 ld a,(1006h) ; A <- (1006h) (RETRY COUNT) f3cb: 3d dec a ; A-- f3cc: 32 06 10 ld (1006h),a ; (1006h) <- A f3cf: ca df f3 jp z,f3dfh ; Si A = 0 Alors va en F3DFh ; ;# ; f3d2: 3e 08 ld a,08h ; Commande 08h (00001000b) A <- 08h f3d4: fd b6 08 or (iy+08h) ; Commande 0Bh (00001011b) RESTORE A <- A Or (IY+08h) (Ajoute 03h Bit 0+1+2 dans la commande) f3d7: cd 6f f3 call f36fh ; Appelle F36Fh (Applique commande stockee dans (1000h) et retourne status dans (1013h)) f3da: e6 85 and 85h ; A <- A AND 85 (10000101b) f3dc: ee 04 xor 04h ; A <- A XOR 04h (00000100b) f3de: c8 ret z ; Si MOTOR OFF et NOT BUSY Alors RETOUR ;# f3df: 3a 00 10 ld a,(1000h) ; A <- (1000h) (Latest FDC Command) f3e2: fe 0b cp 0bh ; A = 0Bh ? (00001011b) (Command : RESTORE 30ms NO VERIFY ?) f3e4: 28 4a jr z,4ah ; Si Oui ALors va en F430h f3e6: fe 1b cp 1bh ; A = 1Bh (00011011b) (Command : SEEK 30ms NO VERIFY ?) f3e8: 28 46 jr z,46h ; Si Oui ALors va en F430h f3ea: fe f4 cp f4h ; A = F4h ? (11110100b) (Command : WRITE TRACK DELAY 30ms) f3ec: 28 42 jr z,42h ; Si Oui ALors va en F430h f3ee: 3a 13 10 ld a,(1013h) ; A <- (1013h) f3f1: cb 7f bit 7,a ; Bit 7 Of A = 1 ? f3f3: 20 46 jr nz,46h ; Si Non ALors va en F43Bh f3f5: cb 77 bit 6,a ; Bit 6 Of A = 1 ? f3f7: 20 3e jr nz,3eh ; Si Non ALors va en F437h f3f9: cb 67 bit 4,a ; Bit 4 Of A = 1 ? f3fb: 18 2d jr 2dh ; Va en F42Ah ;################################# ; ; f3fd: 11 3e e9 ld de,e93eh ; DE <- E93Eh ;# f400: db d8 in a,(d8h) ; A <- Port D8h (Status Register) f402: e6 03 and 03h ; A <- A And 03h (00000011b) f404: fe 02 cp 02h ; A = 02h ? (Regarde si Bit 0=0 et Bit 1=1 soit Busy=0 et Data Request=1) f406: ca 00 f4 jp z,f400h ; Si Non Alors va en F400h (BUSY) f409: fd e9 jp (iy) ; Va en (IY) (Procedure d'affichage du message d'erreur 'disk error') ; ;################################# ;################################# ; f40b: fd cb 00 7e bit 7,(iy+00h) ; Bit 7 Of (IY+00h) = 1 ? f40f: c8 ret z ; Si Oui Alors RETOUR f410: cd 75 f2 call f275h ; Appelle F275h f413: d9 exx f414: cd 58 f2 call f258h f417: d9 exx f418: 7e ld a,(hl) f419: 2f cpl f41a: 77 ld (hl),a f41b: 23 inc hl f41c: 1b dec de f41d: 7a ld a,d f41e: b3 or e f41f: 20 f7 jr nz,f7h f421: c9 ret ; ;################################# ;################################# ; Comparaison entre (DE) et (HL) ; sur B octets ; Renvoi Z=0 (Ok) ou Z=1 (Non Ok) ; ;# Boucle f422: 1a ld a,(de) ; A <- (DE) f423: be cp (hl) ; (HL) = A ? f424: c0 ret nz ; Si Z=1 Alors RETOUR Sinon Z=0 f425: 23 inc hl ; HL++ f426: 13 inc de ; DE-- f427: 10 f9 djnz f9h ; Bouclage B-- Si B<>0 Alors va en F422h ; f429: c9 ret ; ;################################# ;################################# ; ;# f42a: 3e 36 ld a,36h ; A <- 36h f42c: 20 0f jr nz,0fh ; Si Test <> 0 Alors va en F43Dh ;# f42e: 18 07 jr 07h ; Va en F437h ;# f430: 3a 13 10 ld a,(1013h) ; A <- (1013h) f433: cb 7f bit 7,a ; Bit 7 de A = 1 ? f435: 20 04 jr nz,04h ; Si Non alors va en F43Bh ;# f437: 3e 29 ld a,29h ; A <- 29h f439: 18 02 jr 02h ; Va en F43Dh ;# f43b: 3e 32 ld a,32h ; A <- 32h ;# f43d: f5 push af f43e: cd 5d f0 call f05dh ; Arret moteur f441: f1 pop af f442: fb ei f443: ed 7b 25 10 ld sp,(1025h) ; SP <- Restaure la valeur de (1025h-1026h) f447: fd 2a 23 10 ld iy,(1023h) ; IY <- Restaure la valeur de (1023h-1024h) f44b: fd 77 ff ld (iy+ffh),a ; (IY+FFh) <- A ???? f44e: fd e9 jp (iy) ; Va a la procedure dont l'adresse se trouve dans (IY) (F4FAh ? Disk Error) ; ;################################# ;################################# ; Entree Commande B : Boot Drive ; f450: 3e 02 ld a,02h ; A <- 02h f452: 32 31 10 ld (1031h),a ; (1031h) <- 02h f455: af xor a ; A <- 00h ; ; Partie chaude sans init ;# Recopie les valeurs par defaut ; f456: 11 08 10 ld de,1008h ; Pointe sur les datas f459: 21 77 f5 ld hl,f577h ; Valeurs par defaut f45c: 01 0b 00 ld bc,000bh ; Quantite de 11 valeurs (1008h->1012h) f45f: ed b0 ldir ; REPETE (DE) <- (HL) DE++ HL++ BC-- JUSQU'A ce que BC<>0 ;# f461: dd 21 08 10 ld ix,1008h ; IX = 1008h f465: fd 21 fa f4 ld iy,f4fah ; IY = F4FAh (Positionne une adresse de fonction) f469: dd 77 00 ld (ix+00h),a ; Stockage du n° de peripherique (1008h) <- A ;# f46c: 31 f0 10 ld sp,10f0h ; SP <- 10F0h f46f: cd b5 f0 call f0b5h ; Appelle F0B5h (Fonction de Lecture) f472: 21 00 cc ld hl,cc00h ; HL <- CC00h (Endroit de stokage de la lecture disque) f475: 11 43 f5 ld de,f543h ; DE <- F543h (DB 'IPLPRO') f478: 06 07 ld b,07h ; B <- 07h f47a: cd 22 f4 call f422h ; Appelle COMPARAISON (Regarde si entete connue) f47d: 28 2c jr z,2ch ; Si Z=0 (Ok) Alors va en F4ABh f47f: 21 01 cc ld hl,cc01h ; HL <- CC01h f482: 11 4a f5 ld de,f54ah ; DE <- F54Ah (DB '73h 64h 73h 50h 52h 4fh' ( PRO)) f485: 06 06 ld b,06h ; B <- 06h f487: cd 22 f4 call f422h ; Appelle COMPARAISON (Regarde si entete connue) f48a: 28 1f jr z,1fh ; Si Z=0 (Ok) Alors va en F4ABh f48c: 3a 31 10 ld a,(1031h) ; A <- (1031h) f48f: 3d dec a ; A-- f490: 28 7f jr z,7fh ; Si A=0 Alors va en F511h f492: fe 01 cp 01h ; A = 01h ? f494: 28 0a jr z,0ah ; Si Oui Alors va en F4A0h (Reinitialise Sector Number) f496: fe ff cp ffh ; A = FFh ? f498: 28 06 jr z,06h ; Si Oui Alors va en F4A0h (Reinitialise Sector Number) f49a: 11 5e f5 ld de,f55eh ; DE <- F55Eh (DB 'This Disk is not Master !') f49d: c3 0e f5 jp f50eh ; Va en F50Eh (Affiche message d'erreur et attend une reponse) ; ;################################# ;################################# ; On reinitialise le Sector Number ; et on recommence la lecture ; f4a0: 32 31 10 ld (1031h),a ; (1031h) <- A f4a3: 21 00 00 ld hl,0000h ; HL <- 0000h f4a6: 22 09 10 ld (1009h),hl ; (1009h-100Ah) <- 00h (Logical Sector Number) f4a9: 18 c1 jr c1h ; va en F46Ch (On recommence) ; ;################################# ;################################# ; f4ab: 3a 00 cc ld a,(cc00h) ; A <- (CC00h) f4ae: 4f ld c,a ; C <- A f4af: 21 fc d7 ld hl,d7fch ; HL <- D7FCh f4b2: 06 04 ld b,04h ; B <- 04h f4b4: ee 02 xor 02h ; A <- A XOR 02h (Bit 1 = 0) ; ;# Boucle ; f4b6: 77 ld (hl),a ; (HL) <- A (D7FBh->D7FEh) <- A f4b7: 23 inc hl ; HL++ f4b8: 10 fc djnz fch ; Bouclage B-- Si B<>0 Alors va en F4B6h ; f4ba: 21 fc df ld hl,dffch ; HL <- DFFCh f4bd: 06 04 ld b,04h ; B <- 04h f4bf: 3e 73 ld a,73h ; A <- 73h f4c1: a9 xor c ; A <- A xor C ; ;# Boucle ; f4c2: 77 ld (hl),a ; (HL) <- A f4c3: 23 inc hl ; HL++ f4c4: 10 fc djnz fch ; Bouclage B-- Si B<>0 Alors va en F4C2h ; f4c6: 11 4b f1 ld de,f14bh ; DE <- F14Bh (DB 'K & P') f4c9: fe 71 cp 71h ; A = 71h ? f4cb: 28 03 jr z,03h ; Si Oui Alors va en F4D0h ; f4cd: 11 37 f5 ld de,f537h ; Sinon DE <- F537h (DB 'sds') ; f4d0: cd 2a f7 call f72ah ; Affiche une nouvelle ligne et le Message (DE) f4d3: 11 3b f5 ld de,f53bh ; MSG " LOADS " f4d6: cd 15 00 call 0015h ; Appelle Print Line MSG (End 0D) f4d9: 11 07 cc ld de,cc07h ; (CC07h-CC12h+(CC13h)=0Dh) = Name of Software f4dc: cd 15 00 call 0015h ; Appelle Print Line MSG (End 0D) ; ;################################# ;################################# ; Lecture des donnees utilisant ; 1009h-100Ah : Secteur ; 100Bh-100Ch : Taille a lire (Byte to read) ; 100Dh-100Eh : Adresse memoire de chargement (Memory Load Adress) ; et execution du programme charge ; f4df: 21 1e cc ld hl,cc1eh ; HL <- CC1Eh (Sector on 2 bytes) f4e2: 11 09 10 ld de,1009h ; DE <- 1009h (Logical Sector Number) f4e5: 0e 02 ld c,02h ; C <- 02h (Read 2 bytes) ; f4e7: ed b0 ldir ; REPETE (DE) <- (HL) DE++ HL++ BC-- JUSQU'A ce que BC<>0 ; f4e9: 21 14 cc ld hl,cc14h ; HL <- CC14h (2 Bytes SIZE+2 Bytes LOAD+2 Bytes EXEC) f4ec: 0e 04 ld c,04h ; C <- 04h (Read 2 Bytes SIZE+2 Bytes LOAD) ; f4ee: ed b0 ldir ; REPETE (DE) <- (HL) DE++ HL++ BC-- JUSQU'A ce que BC<>0 ; f4f0: cd b5 f0 call f0b5h ; Lecture des donnees f4f3: cd 5d f0 call f05dh ; Arret moteur f4f6: 2a 18 cc ld hl,(cc18h) ; HL <- (CC18h) (Adresse d'execution du programme charge en memoire) f4f9: e9 jp (hl) ; Va en (HL) (Lancement du programme) ; ;################################# ;################################# ; ; f4fa: 3a 31 10 ld a,(1031h) ; A <- (1031h) f4fd: 3d dec a ; A-- f4fe: 28 11 jr z,11h ; Si A=0 Alors va en F511h (Affiche message 'Boot Drive ?' et attend reponse) f500: fe 01 cp 01h ; A = 01h ? f502: 21 00 01 ld hl,0100h ; HL <- 0100h f505: 22 0b 10 ld (100bh),hl ; (100Bh-100Ch) <- 0100h (Bytes to read) (256 octets) f508: ca a0 f4 jp z,f4a0h ; Si A = 01h Alors va en F4A0h (Reinitialise et recommence lecture) f50b: 11 98 f7 ld de,f798h ; DE <- F798h (DB 'Disk Error') ; ;# Affiche message 'Boot Drive ?' ;# et attend une reponse ; f50e: cd 2a f7 call f72ah ; Affiche une nouvelle ligne et le Message (DE) ;# f511: af xor a ; A <- 00h f512: 32 31 10 ld (1031h),a ; (1031h) <- A (00h) f515: 31 f0 10 ld sp,10f0h ; SP <- 10F0h f518: cd 5d f0 call f05dh ; Arret moteur f51b: 11 50 f5 ld de,f550h ; DE <- F550h (DB 'Boot Drive ? ') f51e: cd 2a f7 call f72ah ; Affiche une nouvelle ligne et le Message (DE) ;# f521: cd b3 09 call 09b3h ; Appelle ??KEY (KeyBoard Search and Display Code Conv) f524: fe cb cp cbh ; A = CBH ? (Touche 'M') f526: ca ad 00 jp z,00adh ; Va en 00ADh (Boot a chaud du MONITEUR SYETEME) f529: fe 04 cp 04h ; A = 04H ? (Touche 'D') f52b: ca 7e f5 jp z,f57eh ; Va en F57Eh (Mini DOS) f52e: d6 21 sub 21h ; A <- A - 21h f530: fe 04 cp 04h ; A = 04H ? (Chiffre 1 a 4 possible) f532: 30 ed jr nc,edh ; Si C=0 Alors va en F521h (Mauvaise touche on attend une autre) f534: c3 56 f4 jp f456h ; Va en Boot Drive sans Initialisation ; ;################################# ;################################# ; DB f537: a4 9c a4 0d s d s f53b: 20 b8 b7 a1 9c a4 20 0d l o a d s f543: 02 49 50 4c 50 52 4f I P L P R O F54A: 73 64 73 50 52 4f P R O f550: 42 b7 b7 96 20 44 9d a6 ab 92 20 3f 20 0d B o o t D r i v e ? f55e: 54 98 a6 a4 20 44 a6 a4 a9 20 a6 a4 20 b0 b7 96 20 4d a1 a4 96 92 9d 20 21 T h i s D i s k i s n o t M a s t e r ! ;################################# ; ; Valeurs par defaut entre 1008h->1012h ; f577: 0d ; (1008h) Numero de peripherique (Drive Number) f578: 10 00 ; (1009h-100Ah) Numero de secteur logique (Logical sector number) (0-1279) f57a: 00 ; (100Bh) Nombre d'octets a lire (Bytes to read) (apres que tous les secteurs soient lus) f57b: 04 ; (100Ch) Nombre de secteurs a lire (Number of sectors to read) f57c: 00 cc ; (100Dh-100Eh) Adresse memoire de chargement (Memory Load Adress) f57e: e1 ; (100Fh) Numero de la piste courante (Current Track Number) (0-79) f57f: 22 ; (1010h) Numero du secteur courant (Current Sector Number) (1-16) f580: 27 ; (1011h) Numero de piste de depart (Start Track Number) (0-79) f581: 10 ; (1012h) Numero de secteur de depart (Start Sector Number) (1-16) ; ;################################# ;################################# ; Entree MINI DOS ; f582: ed 73 29 10 ld (1029h),sp ; (1029h) <- SP f586: d3 e4 out (e4h),a ; MONITEUR SYSTEME (0000h-0FFFh)+VIDEO+KEY+TIMER (D000h-FFFFh) f588: 11 c0 f7 ld de,f7c0h ; DE <- F7C0h (DB 'C sds MINI - DOS on Sharp MZ - 700 V 2.0') f58b: cd 2a f7 call f72ah ; Affiche une nouvelle ligne et le Message (DE) f58e: af xor a ; A <- 0 f58f: 32 2e 10 ld (102eh),a ; (102Eh) <- A ; ;# Entree chaude ; f592: af xor a ; a <- 0 f593: 32 2b 10 ld (102bh),a ; (102Bh) <- A ;# f596: ed 7b 29 10 ld sp,(1029h) ; SP <- (1029h) f59a: d3 e4 out (e4h),a ; MONITEUR SYSTEME (0000h-0FFFh)+VIDEO+KEY+TIMER (D000h-FFFFh) f59c: cd 5d f0 call f05dh ; Arret moteur f59f: cd 09 00 call 0009h ; Call ?NL f5a2: 11 a3 11 ld de,11a3h ; DE <- 11A3h (BUFFER 81 Bytes) f5a5: 3e 3e ld a,3eh ; A <- 3Eh ('>') f5a7: cd 12 00 call 0012h ; Appelle 1 CHARACTER PRINT f5aa: cd 03 00 call 0003h ; Appelle GetLine (END 'CR') f5ad: 1a ld a,(de) ; A <- (DE) (Lecture du premier caractere) f5ae: 13 inc de ; DE++ f5af: fe 3e cp 3eh ; A = 3Eh ('>') ? f5b1: 20 df jr nz,dfh ; Si Non Alors va en F592h (Nouvelle entree si '>' n'existe pas) ; ; Recherche de l'instruction (R/W/D/N/M/B/!/#) ; f5b3: 21 a7 f7 ld hl,f7a7h ; HL <- F7A7h (Adresse de la table des instructions Mini DOS avec Adresse d'entree) f5b6: 1a ld a,(de) ; A <- (DE) (Prend le premier caractere apres '>') f5b7: 13 inc de ; DE++ (Positionne le pointeur sur les donnees de l'instruction) f5b8: 47 ld b,a ; B <- A (Sauvegarde le caractere de l'instruction dans B) ; ;# Boucle ; f5b9: 7e ld a,(hl) ; A <- (HL) (Caractere d'instruction decale de 1) f5ba: 3c inc a ; A++ (Retrouve le bon caractere par ajout de 1) f5bb: 28 d5 jr z,d5h ; Si A=0 Alors va en F592h (Instruction non trouvee car fin de liste) f5bd: 23 inc hl ; HL++ f5be: b8 cp b ; A = B ? (Est-ce la bonne instruction ?) f5bf: 28 04 jr z,04h ; Si Oui Alors va en F5C5h (Instruction trouvee) f5c1: 23 inc hl ; HL++ (Non trouvee on passe a l'instruction suivante) f5c2: 23 inc hl ; HL++ (Non trouvee on passe a l'instruction suivante) f5c3: 18 f4 jr f4h ; Va en F5B9h (Boucle) ; ;# ; f5c5: 7e ld a,(hl) ; A <- (HL) f5c6: 23 inc hl ; HL++ f5c7: 66 ld h,(hl) ; H <- (HL) f5c8: 6f ld l,a ; L <- A (HL contient l'adresse d'entree de l'instruction) f5c9: 01 92 f5 ld bc,f592h ; BC <- F592h (Adresse de retour pour nouvelle entree) f5cc: c5 push bc ; Adresse Positionnee sur pile pour retour RET f5cd: e9 jp (hl) ; Va en (HL) (On va a l'instruction trouvee) ; ;################################# ;################################# ; Test si le caractere courant est ; un ',' avec message d'erreur si ; pas le cas ('???') et retour ; saisie MINI DOS ; f5ce: 1a ld a,(de) ; A <- (DE) (Lecture d'un caractere) f5cf: 13 inc de ; DE++ (Positionne sur le caractere suivant) f5d0: fe 2c cp 2ch ; A = 2Ch ? (caractere separateur d'argument ',') f5d2: c8 ret z ; Si Oui Alors RETOUR (On sort si on trouve ',') ;# f5d3: 11 a3 f7 ld de,f7a3h ; DE <- F7A3h (DB '???') (Affichage de '???' indiquant une instruction mal formattee) ; ; Affiche le message une nouvelle ligne ; et retour saisie MINI DOS ; f5d6: cd 2a f7 call f72ah ; Appelle F72Ah (Affiche une nouvelle ligne et le Message contenu dans (DE)) f5d9: 18 b7 jr b7h ; Va en F592h (Nouvelle commande MINI DOS : Entree chaude) ; ;################################# ;################################# ; Test si ',' puis adresse sur 4 ; symbole convertissable ; f5db: cd ce f5 call f5ceh ; Appelle F5CEh (Test si caractere courant est ',') f5de: cd 10 04 call 0410h ; Appelle 0410h (4 ASCII TO (HL) IN:DE=DATA LOW ADR) (Converti l'adresse) f5e1: 38 f0 jr c,f0h ; Si CARRY=1 Alors va en F5D3h (Affiche erreur de format de l'instruction) ;# f5e3: c3 a6 02 jp 02a6h ; Va en 02A6h (INCREMENTATION DU REGISTRE DE de 4 : DE <- DE + 4) ;################################# ;################################# ; Decodage d'une ligne de commande ; de type : a,b,c,d ; f5e6: cd fd f5 call f5fdh ; Appelle F5FDh (Test et lecture du numero de drive) f5e9: cd 62 f7 call f762h ; Appelle F762h (Test et lecture de l'adresse du secteur) f5ec: cd 41 f1 call f141h ; Appelle F141h (Test et Lecture de la taille du programme) f5ef: cd 6c f7 call f76ch ; Appelle F76Ch (Test et lecture de l'adresse memoire) f5f2: 1a ld a,(de) ; A <- (DE) (Lecture dun caractere) f5f3: 13 inc de ; DE++ f5f4: fe 2c cp 2ch ; A = 2Ch ? (Est-ce ',' ?) f5f6: c8 ret z ; Si ',' Alors RETOUR f5f7: fe 0d cp 0dh ; A = 0Dh (Est-ce CR (retour ligne) ?) f5f9: 20 d8 jr nz,d8h ; Si Non Alors va en F5D3h (Affichage de '???' indiquant un mauvais format de la commande) f5fb: b7 or a ; A = 0 ? f5fc: c9 ret ; ;################################# ;################################# ; Test et lecture du numero de drive ; f5fd: dd 21 08 10 ld ix,1008h ; IX <- 1008h (Pointe sur la table d'arguments disque) f601: fd 21 11 f6 ld iy,f611h ; IY <- F611h (Procedure d'affichage du message d'erreur 'disk error') f605: 1a ld a,(de) ; A <- (DE) (Lecture d'un caractere) f606: 13 inc de ; DE++ f607: d6 31 sub 31h ; A <- A - 31h (Recherche un chiffre) f609: fe 04 cp 04h ; A = 04h ? (Inferieur a 4) f60b: 30 c6 jr nc,c6h ; Si Pas un chiffre alors va en F5E3h (Incrementation de DE de 4 octets) f60d: dd 77 00 ld (ix+00h),a ; (IX+00h) <- A (Stockage du numero de peripherique) f610: c9 ret ; ;################################# ;################################# ; Affiche le message 'Disk Error' ; f611: d3 e4 out (e4h),a ; MONITEUR SYSTEME (0000h-0FFFh)+VIDEO+KEY+TIMER (D000h-FFFFh) f613: 11 98 f7 ld de,f798h ; Pointe sur le message (F798h)=DB 'Disk Error' f616: 18 be jr beh ; Va en F5D6 (Affiche le message (DE)) ; ;################################# ;################################# ; ; f618: 26 d7 ld h,d7h ; H <- D7h f61a: dd 7e 00 ld a,(ix+00h) ; A <- (IX+00h) A<-(1008h) f61d: c6 fc add a,fch ; A <- A +FCh f61f: 6f ld l,a ; L <- A f620: cd 1f 04 call 041fh ; Appelle 041Fh (2 ASCII TO (ACC) IN:DE=DATA LOW ADR OUT:CF=0 OK or CF=1 OUT) f623: 38 ae jr c,aeh ; Si CARRY=1 Alors Va en F5E3h (Incrementation de DE de 4 octets) f625: 47 ld b,a ; B <- A f626: 1a ld a,(de) ; A <- (DE) (Lecture d'un caractere) f627: fe 0d cp 0dh ; A = 0Dh ? (Est-ce CR ?) f629: 78 ld a,b ; A <- B f62a: c8 ret z ; Si A=0Dh Alors RETOUR f62b: 18 a6 jr a6h ; Va en F5E3h (Incrementation de DE de 4 octets) ; ;################################# ;################################# ; Imprime une ligne de caracteres ; sur l'imrimante $lpt ; f62d: d5 push de f62e: c5 push bc f62f: 3e 0d ld a,0dh ; A <- 0Dh f631: cd 8f 01 call 018fh ; Appelle 081Fh (ACC PRINT DATA TO PRINTER $LPT) Saute une ligne sur l'imprimante f634: 11 a3 11 ld de,11a3h ; DE <- 11A3h (BUFFER 81 Bytes) ; ;# Boucle ; f637: 1a ld a,(de) ; A <- (DE) (Lecture du contenu) f638: fe 0d cp 0dh ; A = 0Dh ? (Caractere Retour ligne) f63a: ca b3 01 jp z,01b3h ; Si Oui Alors va en 01B3h (PUSH BC/DE/RET) Sortie Fonction f63d: fe 20 cp 20h ; A = 20h ? (Caractere Espace) f63f: 30 02 jr nc,02h ; Si > 20h Alors va en F643h f641: 3e 2e ld a,2eh ; A <- 2Eh (Caractere .) ;# f643: cd 8f 01 call 018fh ; Appelle 081Fh (ACC PRINT DATA TO PRINTER $LPT) Imprime A sur l'imprimante f646: 13 inc de ; DE++ f647: 18 ee jr eeh ; Va en F637h (Bouclage) ; ;################################# ;################################# ; Converti le code dans A vers un ; caractere affichable puis l'affiche ; f649: e5 push hl f64a: c5 push bc f64b: 06 7b ld b,7bh ; B <- 7Bh f64d: 21 ef 0b ld hl,0befh ; HL <- 0BEFh (KEY MATRIX TO DISPLAY CODE TABLE) ; ;# Boucle ; f650: be cp (hl) ; A = (HL) ? f651: 28 05 jr z,05h ; Si Oui Alors va en F658h f653: 23 inc hl ; HL++ f654: 10 fa djnz fah ; Bouclage : B-- Si B<>0 Alors va en F650h ; f656: 3e 2e ld a,2eh ; A <- 2Eh ;# f658: fe f0 cp f0h ; A = F0h ? f65a: 20 01 jr nz,01h ; Si Non Alors va en F65Dh f65c: af xor a ; A <- 0 ;# f65d: c1 pop bc f65e: e1 pop hl f65f: c3 ce 0b jp 0bceh ; Va en ?DACN (Display Code to ASCII Convert) ; ;################################# ;################################# ; Entree Commande # : Affichage ; ecran (0) ou imprimante (1) ; Commutateur ; f662: 3a 2e 10 ld a,(102eh) ; A <- (102Eh) f665: ee 01 xor 01h ; A <- A XOR 01h f667: 32 2e 10 ld (102eh),a ; (102Eh) <- A f66a: c9 ret ; ;################################# ;################################# ; Entree Commende N : Next ; f66b: 3a 2b 10 ld a,(102bh) ; A <- (102Bh) f66e: b7 or a ; A = 0 ? f66f: c8 ret z ; Si Oui Alors RETOUR f670: 2a 2c 10 ld hl,(102ch) ; HL <- (102Ch) (Retrouve le Logical Sector Number) f673: 23 inc hl ; HL++ (Incrementation du Logical Sector Number) f674: cd 65 f7 call f765h ; Appelle F765h (Stockage Logical Sector Number pour lecture) f677: 18 06 jr 06h ; Va en F67Fh (Affiche le bloc suivant : DISPLAY) ; ;################################# ;################################# ; Entree Commande D : Display ; f679: cd fd f5 call f5fdh ; Appelle F5FDh (Test et lecture du numero de drive) f67c: cd 62 f7 call f762h ; Appelle F762h (Test et lecture de l'adresse du secteur) ;# f67f: 21 00 00 ld hl,0000h ; HL <- 0000h f682: cd 6f f7 call f76fh f685: 23 inc hl f686: cd 44 f1 call f144h f689: cd f2 f5 call f5f2h f68c: cc 7f f7 call z,f77fh f68f: d3 e0 out (e0h),a ; RAM (0000h-0FFFh) f691: fd 21 11 f6 ld iy,f611h ; IY <- F611h (Procedure d'affichage du message d'erreur 'disk error') f695: cd b5 f0 call f0b5h ; Lecture f698: d3 e4 out (e4h),a ; MONITEUR SYSTEME (0000h-0FFFh)+VIDEO+KEY+TIMER (D000h-FFFFh) f69a: cd 5d f0 call f05dh ; Arret moteur f69d: dd 6e 01 ld l,(ix+01h) ; L <- (IX+01h) (1009h) Logical Sector Number f6a0: dd 66 02 ld h,(ix+02h) ; H <- (IX+02h) (1010h) Logical Sector Number f6a3: 22 2c 10 ld (102ch),hl ; (102Ch) <- HL Logical Sector Number f6a6: 21 00 00 ld hl,0000h f6a9: 3a 18 10 ld a,(1018h) f6ac: 32 2b 10 ld (102bh),a f6af: 47 ld b,a f6b0: 4d ld c,l ; ;# Boucle 1 ; f6b1: c5 push bc f6b2: 06 10 ld b,10h ; ;# Boucle 2 ; f6b4: c5 push bc f6b5: cd ec f6 call f6ech f6b8: cd c4 f6 call f6c4h f6bb: c1 pop bc f6bc: 10 f6 djnz f6h ; Boucle 2 : B-- Si B<>0 Alors va en F6B4h ; f6be: c1 pop bc f6bf: 10 f0 djnz f0h ; Boucle 1 : B-- Si B<>0 Alors va en F6B1h ; f6c1: c3 96 f5 jp f596h ; Va en F596h f6c4: cd 1b 00 call 001bh ; Appelle GetKey f6c7: c8 ret z f6c8: e5 push hl f6c9: c5 push bc f6ca: 47 ld b,a f6cb: cd 09 00 call 0009h ; Appelle ?NL f6ce: 21 92 11 ld hl,1192h f6d1: 36 c0 ld (hl),c0h f6d3: cd a2 0b call 0ba2h ; Appelle 0BA2h (SV0 -> FLASHING DATA SAVE) f6d6: cd ff 09 call 09ffh ; Appelle 09FFh (?FLAS -> FLASHING 2 Clignotement du curseur) f6d9: cd 1b 00 call 001bh ; Appelle GetKey (OUT:A=ASCII CODE) f6dc: b8 cp b f6dd: 47 ld b,a f6de: 28 f6 jr z,f6h f6e0: fe 64 cp 64h f6e2: ca 92 f5 jp z,f592h f6e5: fe 66 cp 66h f6e7: 20 ed jr nz,edh f6e9: c1 pop bc f6ea: e1 pop hl f6eb: c9 ret ; ;################################# ;################################# ; f6ec: e5 push hl f6ed: 11 a3 11 ld de,11a3h f6f0: cd 3f f7 call f73fh f6f3: cd 33 f7 call f733h f6f6: 06 08 ld b,08h ; ;# Boucle ; f6f8: d3 e0 out (e0h),a ; RAM (0000h-0FFFh) f6fa: 7e ld a,(hl) ; A <- (HL) f6fb: d3 e4 out (e4h),a ; MONITEUR SYSTEME (0000h-0FFFh)+VIDEO+KEY+TIMER (D000h-FFFFh) f6fd: 23 inc hl f6fe: cd 44 f7 call f744h f701: cd 33 f7 call f733h f704: 10 f2 djnz f2h ; Boucle : B-- Si B<>0 Alors va en F6F8h ; f706: cd 3b f7 call f73bh f709: cd 33 f7 call f733h f70c: 06 08 ld b,08h f70e: e1 pop hl ; ;# Boucle ; f70f: d3 e0 out (e0h),a ; RAM (0000h-0FFFh) f711: 7e ld a,(hl) ; A <- (HL) f712: d3 e4 out (e4h),a ; MONITEUR SYSTEME (0000h-0FFFh)+VIDEO+KEY+TIMER (D000h-FFFFh) f714: cd 52 f7 call f752h f717: 23 inc hl f718: 10 f5 djnz f5h ; Boucle : B-- Si B<>0 Alors va en F70Fh ; f71a: 3a 2e 10 ld a,(102eh) ; A <- (102Eh) f71d: b7 or a ; Test A = 0 ? f71e: c4 2d f6 call nz,f62dh ; Si Non Alors Appelle F62Dh (IMPRESSION SUR IMPRIMANTE D'UNE LIGNE DE CARACTERES) f721: 11 a3 11 ld de,11a3h ; DE <- 11A3h (Buffer 81 caracteres de Get Line) f724: cd 09 00 call 0009h ; Appelle ?NL f727: c3 18 00 jp 0018h ; Appelle Print ?MSGX (MSG (DE) termine par 0D) ; ;################################# ;################################# ; Affiche une nouvelle ligne et ; le message (DE) termine par 0dh ; f72a: cd 06 00 call 0006h ; Appelle NewLine f72d: c3 15 00 jp 0015h ; Va en 0015h (Print MSG) ; ;################################# ;################################# ; Stockage de deux caracteres ' '+0dh ; ou un caractere A+0dh dans (DE) ; f730: cd 33 f7 call f733h ;# f733: 3e 20 ld a,20h ; A <- 20h (' ') ;# f735: 12 ld (de),a ; (DE) <- A f736: 13 inc de ; DE++ f737: 3e 0d ld a,0dh ; A <- 0Dh (Retour Ligne) f739: 12 ld (de),a ; (DE) <- A f73a: c9 ret ; ;################################# ;################################# ; Affiche la fin d'une ligne par ';' ; et retour ligne ; f73b: 3e 3b ld a,3bh ; A <- 3Bh (';') f73d: 18 f6 jr f6h ; Va en F735h (Affiche caractere et retour ligne) ; ;################################# ;################################# ; Affiche la valeur hexadecimale ; d'un nombre sur 2 octets ; (adresse) ; f73f: 7c ld a,h ; A <- H f740: cd 44 f7 call f744h ; Affiche demi hexa haut f743: 7d ld a,l ; A <- L puis Affiche demi hexa bas ;# f744: f5 push af f745: 1f rra f746: 1f rra f747: 1f rra f748: 1f rra f749: cd 4d f7 call f74dh f74c: f1 pop af ;# f74d: cd da 03 call 03dah ; Appelle 03DAh (HEXADECIMAL TO ASCII IN:A=(D3-D0)HEXA OUT:A=ASCII) f750: 18 e3 jr e3h ; Va en F735h (Stockage dans (DE) du caractere et retour ligne) ; ;################################# ;################################# ; Convertion ASCII -> DISPLAY et ; affiche le caractere + stockage ; dans (DE) ; f752: cd b9 0b call 0bb9h ; Appelle 0BB9h (ASCII TO DISPLAY CODE CONVERT IN:A=ASCII OUT:A=DISPLAY CODE) f755: cd 49 f6 call f649h ; Appelle F649h (CONVERTI CARACTERE DANS A ET AFFICHE) f758: 18 db jr dbh ; Va en F735h (Stockage dans (DE) du caractere et retour ligne) ; ;################################# ;################################# ; Entree Commande ! : Execution ; d'un programme ; f75a: 2a 27 10 ld hl,(1027h) ; HL <- (1027h) (Recupere l'adresse d'execution) f75d: ed 7b 29 10 ld sp,(1029h) ; SP <- (1029h) (Recupere l'adresse de la pile originale) f761: e9 jp (hl) ; Va en (HL) (Lance le programme) ; ;################################# ;################################# ; Test et lecture de l'adresse du ; secteur et stockage de la valeur ; f762: cd db f5 call f5dbh ; Appelle F5DBh (Lecture de l'adresse dans HL) ; ; Stockage Logical Sector Number ; f765: dd 75 01 ld (ix+01h),l ; (IX+01h) <- L (1009h) <- L Logical Sector Number f768: dd 74 02 ld (ix+02h),h ; (IY+02h) <- H (100Ah) <- H Logical Sector Number f76b: c9 ret ; ;################################# ;################################# ; Test et lecture de l'adresse ; de stockage memoire et stockage ; de la valeur ; f76c: cd db f5 call f5dbh ; Appelle F5DBh (Lecture de l'adresse dans HL) ;# f76f: dd 75 05 ld (ix+05h),l ; (IX+05h) <- L (100Dh) <- L Memory Load Adress f772: dd 74 06 ld (ix+06h),h ; (IX+06h) <- H (100Eh) <- H Memory Load Adress f775: c9 ret ;################################# ;################################# ; Entree Commande R : Read Data ; f776: cd e6 f5 call f5e6h ; Appelle F5E6h (Decodage de la ligne de commande avec stockage des valeurs) f779: cc 7f f7 call z,f77fh ; Si A = 0 Alors Appelle F77Fh f77c: c3 b5 f0 jp f0b5h ; Va a la procedure F0B5h (Lecture de donnees sur le disque) ; ;################################# ;################################# ; f77f: cd 18 f6 call f618h f782: ee 02 xor 02h ; A <- A XOR 02h f784: 77 ld (hl),a ; (HL) <- A f785: c9 ret ; ;################################# ;################################# ; Entree Commande W : Write Data ; f786: cd e6 f5 call f5e6h ; Appelle F5E6h (Decodage de la ligne de commande avec stockage des valeurs) f789: cc 8f f7 call z,f78fh ; Si A = 0 Alors Appelle la procedure F78Fh ( f78c: c3 54 f1 jp f154h ; Va a la procedure F154h : Ecriture sur le disque ; ;################################# ;################################# ; f78f: cd 18 f6 call f618h f792: ee 73 xor 73h ; A <- A XOR 73h f794: cb dc set 3,h ; Bit 3 de H <- 1 f796: 77 ld (hl),a ; (HL) <- A f797: c9 ret ; ;################################# ;################################# ; Messages d'erreurs MINI DOS ; f798: 44 a6 a4 a9 20 45 9d 9d b7 9d 0d D i s k E r r o r f7a3: 3f 3f 3f 0d ? ? ? ;################################# ;################################# ; Table des commandes associees aux ; adresses d'entree des procedures ; f7a7: 51 ; DB 'Q' -> 'R' R,,, Read f7a8: 76 f7 ; Adresse F776h f7aa: 56 ; DB 'V' -> 'W' W,,, Write f7ab: 86 f7 ; Adresse F786h f7ad: 43 ; DB 'C' -> 'D' D, Display f7ae: 79 f6 ; Adresse F679h f7b0: 4d ; DB 'M' -> 'N' N Next (Display Next Sector) f7b1: 6b f6 ; Adresse F66B f7b3: 4c ; DB 'L' -> 'M' Monitor System f7b4: ad 00 ; Adresse 00ADh f7b6: 41 ; DB 'A' -> 'B' Boot Drive f7b7: 50 f4 ; Adresse F450h f7b9: 20 ; DB ' ' -> '!' Execution d'un programme f7ba: 5a f7 ; Adresse F75Ah f7bc: 22 ; DB '"' -> '#' Inversion du Bit 0 de (102Eh) : 0=Ecran ou 1=Imprimante f7bd: 62 f6 ; Adresse F662 f7bf: ff rst 38H ; ;################################# ;################################# ; ; f7c0: 16 a4 9c a4 20 4d 49 4e 49 20 2d 20 44 4f 53 20 20 b7 b0 20 53 98 a1 9d 9e 20 4d 5a 20 2d 20 37 30 30 20 20 56 20 32 2e 30 0d C sds MINI - DOS on Sharp MZ - 700 V 2.0 f7ea: 00 00 00 00 00 00 ; ;################################# ;################################# ; Initialisation ; f7f0: f3 di ; Desactive les interruptions f7f1: 11 00 00 ld de,0000h ; DE <- 0000h f7f4: af xor a ; A <- 00h f7f5: cd 33 00 call 0033h ; Appelle TimeSet f7f8: c3 50 f4 jp f450h ; Va en F450h (BOOT DRIVE) ; ;################################# f7fb: 00 00 00 00 00