First | Back | Next | Last
| Test Suite | | Title: | Test Suite |
| Category: | Utility/Programming |
| Release Date: | 2006-06-01 |
| Language: | English |
| Size: | 64K |
| Device Req.: | Disk only (2 sides) |
| Machine: | PAL & NTSC |
| Code Type: | Machine code |
| Distribution: | Freeware |
| Converted by: | L., Vladimir (Litwr) |
| Notes: | This software checks the compatibility of emulators. |
Download:
Source:
No votes yet. |  |
|
| |
| Description | C+4 Emulator Test Suite - Public Domain, no Copyright based on c64 Test Suite
The purpose of the C+4 Emulator Test Suite is - to help C+4 emulator authors to improve the compatibility - to ensure that updated emulators have no new bugs in old code parts
The suite are a few hundred C+4 programs which check the details of the C+4 they are running on. The suite runs automated and stops only if it has detected an error.
That the suite doesn't stop on SVS C+4 (PAL) proves that the suite has no bugs. That the same suite doesn't stop on an emulator proves that this particular emulator is compatible to SVS C+4 regarding every tested detail. Of course, the emulator may still have bugs in parts which are not tested by the suite. There may also be a difference between your C+4 and SVS C+4.
While the Test Suite is running, the Datasette should be disconnected. Needs about 70 min to complete.
The source code for C64 has been developed with MACRO(SS)ASS+ by Wolfram Roemhild. I used Macro Ass+ improved by mr. Mind in 1993 (Turbo-Ass Mac+ extended version (c) Omicron). You should use C64 or C64 emulator to compile sourses. The program BRANCHWRAP had no source in the original Test Suite for C64.
/////////////////////////////////////////////////////////////////////////////// The sequence of the test calls
disk1: START LDAB LDAZ LDAZX LDAA LDAAX LDAAY LDAIX LDAIY STAZ STAZX STAA STAAX STAAY STAIX STAIY LDXB LDXZ LDXZY LDXA LDXAY STXZ STXZY STXA LDYB LDYZ LDYZX LDYA LDYAX STYZ STYZX STYA TAXN TAYN TXAN TYAN TSXN TXSN PHAN PLAN PHPN PLPN INXN INYN DEXN DEYN INCZ INCZX INCA INCAX DECZ DECZX DECA DECAX ASLN ASLZ ASLZX ASLA ASLAX LSRN LSRZ LSRZX LSRA LSRAX ROLN ROLZ ROLZX ROLA ROLAX RORN RORZ RORZX RORA RORAX ANDB ANDZ ANDZX ANDA ANDAX ANDAY ANDIX ANDIY ORAB ORAZ ORAZX ORAA ORAAX ORAAY ORAIX ORAIY EORB EORZ EORZX EORA EORAX EORAY EORIX EORIY CLCN SECN CLDN SEDN CLIN SEIN CLVN ADCB ADCZ ADCZX ADCA ADCAX ADCAY ADCIX ADCIY SBCB SBCZ SBCZX SBCA SBCAX SBCAY SBCIX SBCIY CMPB CMPZ CMPZX CMPA CMPAX CMPAY CMPIX CMPIY CPXB CPXZ CPXA CPYB CPYZ CPYA BITZ BITA BRKN RTIN JSRW RTSN JMPW JMPI
disk2: JMPI BEQR BNER BMIR BPLR BCSR BCCR BVSR BVCR NOPN NOPB NOPZ NOPZX NOPA NOPAX ASOZ ASOZX ASOA ASOAX ASOAY ASOIX ASOIY RLAZ RLAZX RLAA RLAAX RLAAY RLAIX RLAIY LSEZ LSEZX LSEA LSEAX LSEAY LSEIX LSEIY RRAZ RRAZX RRAA RRAAX RRAAY RRAIX RRAIY DCMZ DCMZX DCMA DCMAX DCMAY DCMIX DCMIY INSZ INSZX INSA INSAX INSAY INSIX INSIY LAXZ LAXZY LAXA LAXAY LAXIX LAXIY AXSZ AXSZY AXSA AXSIX ALRB ARRB SBXB SHAAY SHAIY SHXAY SHYAX SHSAY ANCB LASAY SBCB(EB) TRAP1 TRAP2 TRAP3 TRAP9 TRAP10 TRAP11 TRAP12 TRAP13 TRAP14 TRAP16 BRANCHWRAP MMUFETCH CPUTIMING
/////////////////////////////////////////////////////////////////////////////// Program _START - some 6510 basic commands, just as an insurance
/////////////////////////////////////////////////////////////////////////////// Programs LDAb to SBCb(EB) - 6510 command function
addressing modes ----------------------------------- n none (implied and accu) b byte (immediate) w word (absolute for JMP and JSR) z zero page zx zero page,x zy zero page,y a absolute ax absolute,x ay absolute,y i indirect (JMP) ix (indirect,x) iy (indirect),y r relative
Display: before data accu xreg yreg flags sp after data accu xreg yreg flags sp right data accu xreg yreg flags sp
Either press STOP or any other key to continue.
All 256 opcodes are tested except HLTn (02 12 22 32 42 52 62 72 92 B2 D2 F2), ANEb (8B), LXAb (AB). Two last instructions algorithm for c+4 is still undescovered. :-(
Indexed addressing modes count the index registers from 00 to FF.
JMPi (xxFF) is tested.
Single operand commands: 256 data combinations from 00 to FF multiplied by 256 flag combinations.
Two operand commands: 256 data combinations 00/00, 00/11, ... FF/EE, FF/FF multiplied by 256 flag combinations.
LASay, SHAay, SHAiy, SHXay, SHYax and SHSay are executed only in the y border. These commands cause unpredictable results at c64 when a DMA comes between the command byte and the operand. It is left unchanged for c+4.
SHAay, SHAiy, SHXay, SHYax and SHSay are tested on a data address xxFF only. When the hibyte of the indexed address needs adjustment, these commands will write to different locations, depending on the data written.
/////////////////////////////////////////////////////////////////////////////// Programs TRAP* - 6510 IO traps, page boundaries and wrap arounds
# code data zd zptr aspect tested ----------------------------------------------------------------------------- 1 3000 31C0 F7 F7/F8 basic functionality 2 2FFE 31C0 F7 F7/F8 4k boundary within 3 byte commands 3 2FFF 31C0 F7 F7/F8 4k boundary within 2 and 3 byte commands 9 3000 31C0 02 F7/F8 wrap around in zx and zy addressing 10 3000 31C0 00 F7/F8 IO traps for 8 bit data access 11 3000 31C0 F7 02/03 wrap around in ix addressing 12 3000 41C0 F7 FF/00 wrap around and IO trap for pointer accesses 13 3000 0002 F7 F7/F8 64k wrap around in ax, ay and iy addressing 14 3000 0000 F7 F7/F8 64k wrap around plus IO trap 16 FFFE ---- -- --/-- 64k boundary within 3 byte commands
In the program TRAP16, the locations of data, zerodata and zeroptr depend on the addressing mode. The CPU port at 00/01 is not able to hold all 256 bit combinations.
Display: after data accu xreg yreg flags right data accu xreg yreg flags
If all displayed values match, some other aspect is wrong, e.g. the stack pointer or data on stack.
All 256 commands are tested except HLTn/ANEb/LXAb. Registers before: data 1B (00 01 10 11) accu C6 (11 00 01 10) xreg B1 (10 11 00 01) yreg 6C (01 10 11 00) flags 00
The code length is 6 bytes maximum (SHSay).
When the lowbyte of the data address is less than C0, SHAay, SHAiy, SHXay, SHYax and SHSay aren't tested. Those commands don't handle the address adjustment correctly.
Relative jumps are tested in 4 combinations: offset 01 no jump, offset 01 jump, offset 80 no jump, offset 80 jump. For the offset 80, a RTS is written to the location at code - 7E.
/////////////////////////////////////////////////////////////////////////////// Program BRANCHWRAP - Forward branches from FFxx to 00xx
Backward branches from 00xx to FFxx were already tested in TRAP16.
/////////////////////////////////////////////////////////////////////////////// Program MMUFETCH - 6510 code fetching while memory configuration changes
An example is the code sequence STA $FF3E : BRK in RAM at Axxx. Because STA $FF3E maps the Basic ROM, the BRK will never get executed.
addr sequence --------------------- 8776 RAM-Basic-RAM CBC0 RAM-Kernal-RAM
/////////////////////////////////////////////////////////////////////////////// Program CPUTIMING - 6510 timing whole commands
Display: xx command byte clocks #measured right #2
#1 #2 command or addressing mode -------------------------------------- 2 2 n 2 2 b 3 3 Rz/Wz 5 5 Mz 4 8 Rzx/Rzy/Wzx/Wzy 6 10 Mzx/Mzy 4 4 Ra/Wa 6 6 Ma 4 8 Rax/Ray (same page) 5 9 Rax/Ray (different page) 5 9 Wax/Way 7 11 Max/May 6 8 Rix/Wix 8 10 Mix/Miy 5 7 Riy (same page) 6 8 Riy (different page) 6 8 Wiy 8 10 Miy 2 18 r+00 same page not taken 3 19 r+00 same page taken 3 19 r+7F same page taken 4 20 r+01 different page taken 4 20 r+7F different page taken 3 19 r-03 same page taken 3 19 r-80 same page taken 4 20 r-03 different page taken 4 20 r-80 different page taken 7 7 BRKn 3 3 PHAn/PHPn 4 4 PLAn/PLPn 3 3 JMPw 5 5 JMPi 6 6 JSRw 6 6 RTSn 6 6 RTIn
#1 = command execution time without overhead #2 = displayed value including overhead for measurement R/W/M = Read/Write/Modify
This program was considerably rewritten for C+4. It is possible to compile its source under C+4 with C+4 port of Turbo Assembler. It works under single clock mode.
/////////////////////////////////////////////////////////////////////////////// To do...
Tests for IRQ, IMR, and timers are not converted. Tests for TED/ACIA/PIO/... are missed. :-( Feel free to add them!
|
| |
Copyright © Plus/4 World Team, 2001-2008 |