Il 22/03/2015 18:04, Stefano Bodrato ha scritto:
Se comprendo bene il disassemblato del Discovery l'ultima "AND A" potrebbe rispondere alla tua domanda. Se ricordo bene il tuo codice si basa sulla stessa call, anche se non è troppo evidente. 1191 LOAD_NEXT LD H,B HL := current block. LD L,C INC BC BC := next block. LD (5C9E),BC Store it in the descriptor LD BC,+0200 Signal: load a full block. LD A,(IX+07) A := drive-number. PUSH DE DE = startaddress to load. CALL 0FE5,CAL_PHY Load the block. POP HL HL := startaddress to load LD C,(IX+12) BC := block-size. LD B,(IX+13) ADD HL,BC HL := new startaddress. EX DE,HL Pass it to DE. AND A Signal: success. RET
Uhm... io però questo test non so neanche dove metterlo perché la lettura del settore è fatta così:
RDS CALL 5896 LD A,1 LD B,2 LD C,0 LD HL,(SCT) LD DE,STA CALL CPH JP 5960Non mi chiedere dove la trovai a suo tempo, però funziona benissimo. Come vedi termina con una jump e non so se si può mettere qualcosa tra CALL CPH e la jump, come ad esempio:
CALL CPH AND A JR NZ,ERR JP 5960o qualcosa di simile. Il problema è che non avendo l'Opus non posso fare prove e se non trovo qualcosa di sicuro mi sa che è impossibile per me implementare questo controllo dell'errore... :-(
EMG -- EMAG Software Homepage: http://www.emagsoftware.it The EMG Music page: http://www.emagsoftware.it/emgmusic The EMG's ZX-Spectrum Page: http://www.emagsoftware.it/spectrum The Best of Spectrum Games: http://www.emagsoftware.it/tbosg