gaweł pisze:Piszesz, że można rozróżnić różne wersje procków. Zastanawiam się, na jakiej podstawie jest to możliwe? Możesz troszkę to wyjaśnić?
Sam niewiele o tym wiedziałem. Kolega @tapy podesłał mi link.
Autor programu zebrał różne dziwne zachowania różnych wersji Z80.
CMOS od NMOS można odróżnić po skutkach rozkazu OUT (C),0
Kod: Zaznacz cały
;-------------------------------------------------------------------------
; TESTCMOS - Test if the CPU is a CMOS variety according to OUT (C),0 test
; Note: CMOS Sharp LH5080A is reported as NMOS
; Input:
; None
; Output:
; A = 00 - NMOS
; A = FF - CMOS
;-------------------------------------------------------------------------
OUT (SIOBC),A
.DB 0EDH, 071H ; UNDOCUMENTED OUT (C),<0|0FFH> INSTRUCTION
; WRITE 0 OR FF TO THE SIO INTERRUPT VECTOR NRD-owskie klony inaczej wykonują rozkaz OUTI
Kod: Zaznacz cały
;-------------------------------------------------------------------------
; TESTU880 - Check if the CPU is MME U880 or Thesys Z80
; Input:
; None
; Output:
; A = 0 - Non-U880
; A = 1 - U880
;-------------------------------------------------------------------------
.DB 0EDH,0A3H ; Z80 OUTI INSTRUCTIONPozostałe testy polegają na sprawdzaniu wpływu instrukcji SCF na nieużywane flagi (bit 3. i 5. rejestru F)
Kod: Zaznacz cały
;-------------------------------------------------------------------------
; TESTXY - Tests how SCF (SCF) instruction affects FLAGS.5 (YF) and FLAGS.3 (XF)
; Input:
; None
; Output:
; A[7:6] - YF result of F = 0, A = C | 0x20 & 0xF7
; A[5:4] - XF result of F = 0, A = C | 0x08 & 0xDF
; A[3:2] - YF result of F = C | 0x20 & 0xF7, A = 0
; A[1:0] - XF result of F = C | 0x08 & 0xDF, A = 0
; Where the result bits set as follows:
; 00 - YF/XF always set as 0
; 11 - YF/XF always set as 1
; 01 - YF/XF most of the time set as 0
; 10 - YF/XF most of the time set as 1
;-------------------------------------------------------------------------Przeportowałem tylko kod, żeby działał na komputerach bez CP/M.
