;+-------------------------------------------+ ;¦ DISASSEMBLED FILE - DONE WITH DISASM 10ß ¦ ;¦ Date: 27-02-2015 Time: 20:53 ¦ ;¦ Micro-code d’Hector une fois instancié ¦ ;¦ Dans Hector en 4002h ¦ ;¦ JJ – Yo_fr ¦ ;¦ Moscou Fevrier 2015 ¦ ;¦ Repris en Mai 2015 pour compilation ¦ ;¦ Fonctionnel en octobre 2O15 ! ¦ ;¦ (c) 1996 Channex aka Lasse S Tassing ¦ ;¦ Email: ltassingitedk ¦ ;+-------------------------------------------+ ; -[CODE]--------------------------------------------------- org $6000 ; VIDEO PLAYER RELATIF! ; On recoit en 1er octet un offset ; Puis 2 octets de valeur d'écran ; Offset : ; S'il vaut 0 c'est que c'est un envoi de donnée brute (couleur/résolution) ; Sinon c'est un déplacement positif non signé... PORTA: EQU $F0 PORTB: EQU $F1 PORTC: EQU $F2 NOP ; Des fois que... VIDEO_OFF: RST 18H ; Dans tous les cas, c'est en mémoire VIDEO ! DI LD A,0 OUT (PORTA),A ; RAZ du port A BCL_VID_OFF: ; Lecture des 4 octets de façon consécutive. ; 1er => B ; 2eme => D ; 3eme => E ; 4eme => C ; Sachant que A sert tout le temps et ; HL est le pointeur d'écran IN A,(PORTC) ; 11 lecture portC AND $10 ; 7 PC4? Octet suivant D>H disponible ? ( BIT = 8 cycles!) JR Z,BCL_VID_OFF ; 12/7 attente IN A,(PORTB) ; 11 Lecture PORTA (octet en provenance Disk) LD B,A ; 4 on mets de coté LD A,$05 ; 7 X0/X2 => PC0 / PC2 à 1 OUT (PORTC),A ; 11 Validation octet envoyé sur PORTB LD A,$07 ; 7 X0/X1/X2 => PC0 PC1 PC2 OUT (PORTC),A ; 11 RAZ du bit X1 => validation lecture LD A,3 OUT (PORTA),A IN A,(PORTB) ; Lecture PORTA (octet en provenance Disk) LD D,A ; On mets dans reg D l'octet 2 reçu LD A,2 OUT (PORTA),A IN A,(PORTB) ; 11 Lecture PORTA (octet en provenance Disk) LD E,A ; 4 On mets dans reg E l'octet 3 reçu LD A,1 OUT (PORTA),A IN A,(PORTB) ; 11 Lecture PORTA (octet en provenance Disk) LD C,A ; 4 On mets dans reg D l'octet 4 reçu ; Les 4 octets ont été reçus ! ;1er octet : offset dans B LD A,B ; Restauration octet lu ! CP 0 ; Offset reçu = 0 ??? JR Z,CONTROLE_VIDEO ; Addition HL,A ADD A,L LD L,A ADC A,H SUB L LD H,A ; 1er octet de 4 pixels LD (HL),D ; Mise en place de l'octet ; 2em octet de 4 pixels INC HL LD (HL),E ; Mise en place de l'octet ; 3em octet de 4 pixels INC HL LD (HL),C ; Mise en place de l'octet JR BCL_VID_OFF CONTROLE_VIDEO: ; Si on est ici c'est que l'on a recu un code offset à 0 ; On charge donc les 2 octets suivant dans HL LD H,D LD L,E ; Si adresse = 01 => c'est que c'est fini on sort ; -> 0100 ou 0001 ou 0101 ce qui ne rime à rien dans la ram Hector ! LD A,L OR H CP 1 JR Z,VIDEO_OUT ; Si c'est la cas => on sort ! ; Sinon c'est que l'on souhaite écrire en mémoire ! LD (HL),C ; et on relance JR BCL_VID_OFF ; non ce n'est pas une nouvelle frame, mais une nouvelle base de remplissage BCL_NEW_FRAME VIDEO_OUT: LD HL, $0 LD (HL),$FF ; passage en HR ! EI RET END_CODE: