De door mij gevonden onbekende Z80-INSTRUKTIES ---------------------------------------------- Als er een de opcode: #DD voor een instruktie staat, en daarop volgt een opcode die een werking uitvoert zonder de opcode: #DD met HL, H of L dan is dit ook mo-gelijk met IX, I of X en IY, I of Y. Deze instrukties zijn: Omdat er nogal een verwarring kan ontstaan met de I van IX en met die van IY, heb ik ze dus maar als volgt genoemd: HIX => De I van IX HIY => De I van IY LIX => De X van IX LIY => De Y van IY De H en L houden dan High en Low in van het desbetreffende register. Hier volgt een lijst van de door mij gevonden instrukties: OPCODES INS OMSCHRIJVING INS. OPCODES INS. OMSCHRIJVING. ----------- ----------------- ------------ ------------- #DD #24 INC HIX #FD #24 INC HIY #DD #25 DEC HIX #FD #25 DEC HIY #DD #26 nn LD HIX,nn #FD #26 nn LD HIY,nn #DD #2C INC LIX #FD #2C INC LIY #DD #2D DEC LIX #FD #2D DEC LIY #DD #2E nn LD LIX,nn #FD #2E nn LD LIY,nn #DD #44 LD B,HIX #FD #44 LD B,HIY #DD #45 LD B,LIX #FD #45 LD B,LIY #DD #4C LD C,HIX #FD #4C LD C,HIY #DD #4D LD C,LIX #FD #4D LD C,LIY #DD #54 LD D,HIX #FD #54 LD D,HIY #DD #55 LD D,LIX #FD #55 LD D,LIY #DD #5C LD E,HIX #FD #5C LD E,HIY #DD #5D LD E,LIX #FD #5D LD E,LIY #DD #60 LD HIX,B #FD #60 LD HIY,B #DD #61 LD HIX,C #FD #61 LD HIY,C #DD #62 LD HIX,D #FD #62 LD HIY,D #DD #63 LD HIX,E #FD #63 LD HIY,E #DD #64 LD HIX,HIX #FD #64 LD HIY,HIY #DD #65 LD HIX,LIX #FD #65 LD HIY,LIY #DD #67 LD HIX,A #FD #67 LD HIY,A #DD #68 LD LIX,B #FD #68 LD LIY,B #DD #69 LD LIX,C #FD #69 LD LIY,C #DD #6A LD LIX,D #FD #6A LD LIY,D #DD #6B LD LIX,E #FD #6B LD LIY,E #DD #6C LD LIX,HIX #FD #6C LD LIY,HIY #DD #6D LD LIX,LIX #FD #6D LD LIY,LIY #DD #6F LD LIX,A #FD #6F LD LIY,A #DD #7C LD A,HIX #FD #7C LD A,HIY #DD #7D LD A,LIX #FD #7D LD A,LIY #DD #84 ADD A,HIX #FD #84 ADD A,HIY #DD #85 ADD A,LIX #FD #85 ADD A,LIY #DD #8C ADC A,HIX #FD #8C ADC A,HIY #DD #8D ADC A,LIX #FD #8D ADC A,LIY #DD #94 SUB HIX #FD #94 SUB HIY #DD #95 SUB LIX #FD #95 SUB LIY #DD #9C SBC A,HIX #FD #9C SBC A,HIY #DD #9D SBC A,LIX #FD #9D SBC A,LIY #DD #A4 AND HIX #FD #A4 AND HIY #DD #A5 AND LIX #FD #A5 AND LIY #DD #AC XOR HIX #FD #AC XOR HIY #DD #AD XOR LIX #FD #AD XOR LIY #DD #B4 OR HIX #FD #B4 OR HIY #DD #B5 OR LIX #FD #B5 OR LIY #DD #BC CP HIX #FD #BC CP HIY #DD #BD CP LIX #FD #BD CP LIY #DD #CB nn #00 RLC (IX+nn) & LD B,(IX+nn) #DD #CB nn #01 RLC (IX+nn) & LD C,(IX+nn) #DD #CB nn #02 RLC (IX+nn) & LD D,(IX+nn) #DD #CB nn #03 RLC (IX+nn) & LD E,(IX+nn) #DD #CB nn #04 RLC (IX+nn) & LD H,(IX+nn) #DD #CB nn #05 RLC (IX+nn) & LD L,(IX+nn) #DD #CB nn #06 RLC (IX+nn) & LD F,(IX+nn) 1) #DD #CB nn #07 RLC (IX+nn) & LD A,(IX+nn) #DD #CB nn #08 RRC (IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #10 RL (IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #18 RR (IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #20 SLA (IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #28 SRA (IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #30 SLL (IX+nn) & LD B,(IX+nn) etc. 2) #DD #CB nn #38 SRL (IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #80 RES 0,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #88 RES 1,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #90 RES 2,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #98 RES 3,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #A0 RES 4,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #A8 RES 5,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #B0 RES 6,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #B8 RES 7,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #C0 SET 0,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #C8 SET 1,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #D0 SET 2,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #D8 SET 3,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #E0 SET 4,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #E8 SET 5,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #F0 SET 6,(IX+nn) & LD B,(IX+nn) etc. #DD #CB nn #F8 SET 7,(IX+nn) & LD B,(IX+nn) etc. #CB #30 SLL B 2) #CB #31 SLL C #CB #32 SLL D #CB #33 SLL E #CB #34 SLL H #CB #35 SLL L #CB #36 SLL (HL) #CB #37 SLL A #ED #70 IN F,(C) 3) #ED #71 OUT F,(C) 4) Verder zijn alle IX functies ook met IY mogelijk, de opcode wordt dan niet #DD, maar #FD (zie ook in de eerste reeks met instrukties) ad 1) #DD #CB nn #06 is de 'bekende' instruktie. Deze is eigenlijk ook zo'n 'dubbele` maar, omdat bij de andere ook de vlaggen verandert worden, wordt deze afgekort tot RLC (IX+nn). ad 2) SLL (IX+nn), een bijzonder geval. Men mag op het eerste gezicht aannemen dat deze een tegengestelde werking heeft van SRL (IX+nn). Bij nader onderzoek blijkt het dat er wel naar links geschoven wordt, maar dat er een 1 ipv een 0 in het overblijvende bit wordt gezet. SLL schuift dus zo: [carry] <- [bit 7 <- bit 0] <- [1] ad 3) IN F,(C) voert dezelfde instruktie uit als alle andere IN x,(C), alleen nu wordt er geen register gebruikt, dus alleen de vlaggen worden verandert. ad 4) OUT F,(C) ja, een probleem, want ik weet niet wat hij doet. Aangezien IN F,(C) zal OUT F,(C) ook wel bestaan, maar ik weet dus NIET wat hij uitvoerd. Tot slot wil ik nog even zeggen dat er schijnbaar ook echt instrukties ontbreken zoals: LD HIX,(IX+nn), immers LD H,(HL) bestaat ook en IN HIX,(C) kan ik ook nergens vinden, terwijl HIX ook gewoon een 8 bits register is. Nu heb ik nog een paar vragen: Waarom zijn deze instrukties helemaal niet bekend in ML, Z80 boeken. Is dit niet standaard ofzo? Werkt het alleen op bepaalde Z80 types, van bepaalde fabrikanten. Op mijn TOSHIBA MSX1 met Z80B, NMS 8235 met een normale Z80A, NMS 8250 met Z80H en op mijn SONY HB F700P met ook een Z80H werkt alles perfect, dus het zal daar ook wel niet aan liggen. Maar ja, waar dan wel aan. Zeker niet aan de verwarringsmogelijk van de I van IX en de I van IY. Dan hadden ze ze maar anders moeten noemen. Dus hier staat een groot vraagteken.. Mocht iemand toch een idee hebben, laat het me dan A.U.B. weten! Veel succes ermee en laten we hopen dat er nog programma's mee versneld ofzo kunnen worden, ivm met meer 8 bits registers tegelijk, zodat minder de stack pointer gebruikt hoeft te worden. (c) 1992 ricosoftware by of course Richard Spijkers Tel 04242-83946 (spraak)