URL
https://opencores.org/ocsvn/tv80/tv80/trunk
Subversion Repositories tv80
[/] [tv80/] [trunk/] [tests/] [load_optest.ast] - Rev 112
Compare with Previous | Blame | View Log
; Test of load opcodes;; Goes through most varieties of load opcode and tests for; correct behavior..module load_optest;--------------------------------------------------------; special function registers;--------------------------------------------------------_sim_ctl_port = 0x0080_msg_port = 0x0081_timeout_port = 0x0082_max_timeout_low = 0x0083_max_timeout_high = 0x0084_intr_cntdwn = 0x0090_cksum_value = 0x0091_cksum_accum = 0x0092_inc_on_read = 0x0093stack_end = 0xFFFF.area INIT (ABS).org 0jp initinit:ld sp, #stack_endjp startpassed:ld a, #0x1out (_sim_ctl_port), ahaltfailed:ld a, #0x2out (_sim_ctl_port), ahalt;; subroutine to print a message;; called from within the "print" macro;; expects address to be printed in hl;; preserves all other registersprint_sub:push bcld b, aprint_sub_loop:ld a, (hl)cp #0x0jp z, print_sub_exitout (_msg_port), ainc hljp print_sub_loopprint_sub_exit:ld a, bpop bcret;; print a hex number between 0-255, stored in the A registerprint_number:push bcld b, a ; store number to be printed in band #0xf0sra asra asra asra acp a, #10jp p, alpha_0add #48 ; ordinal value of '0'out (_msg_port), ajp second_digitalpha_0:add #55 ; 'A' - 10out (_msg_port), asecond_digit:ld a, band #0x0fcp a, #10jp p, alpha_1add #48out (_msg_port), ajp print_number_exitalpha_1:add #55 ; 'A' - 10out (_msg_port), aprint_number_exit:pop bcretfail_text: .ascii "Test failed at checkpoint #".db #0x00; expects failing message number in Bfail_routine:ld hl, #fail_textcall print_sub ; print out boilerplate textld a, bcall print_number ; print out error numberld a, #0x0a ; print carriage returnout (_msg_port), ajp failedstarting_test: .ascii "Starting test".db 0x0A.db 0x00error_cnt:.db 0;; Ordering of segments for the linker..area _HOME.area _CODE.area _GSINIT.area _GSFINAL.area _DATA.area _BSS.area _HEAP.area _CODE;------------------------------------------------------------; Beginning of test;------------------------------------------------------------start:ld hl, #starting_testcall print_subld a, #1ld hl,#error_cntld (hl),a ;clear error countnop_1: nopnop;print "Starting ld tests"ld_167: ld a,#0x55cp #0x55jr z,ld_1ld b, #167jp fail_routineld_1: ld b,#0x7Fld a,#0x7Fcp bjr z,ld_2ld b, #1jp fail_routineld_2: ld c,#0x80ld a,#0x80cp cjr z,ld_3ld b, #2jp fail_routineld_3: ld d,#0xAAld a,#0xAAcp djr z,ld_4ld b, #3jp fail_routineld_4: ld e,#0x55ld a,#0x55cp ejr z,ld_5ld b, #4jp fail_routineld_5: ld h,#0x7Fld a,#0x7Fcp hjr z,ld_6ld b, #5jp fail_routineld_6: ld l,#0x80ld a,#0x80cp ljr z,ld_7ld b, #6jp fail_routineld_7: ld a,#0x55ld b,acp bjr z,ld_8ld b, #7jp fail_routineld_8: ld c,bcp cjr z,ld_9ld b, #8jp fail_routineld_9: ld d,ccp djr z,ld_10ld b, #9jp fail_routineld_10: ld e,dcp ejr z,ld_11ld b, #10jp fail_routineld_11: ld h,ecp hjr z,ld_12ld b, #11jp fail_routineld_12: ld l,hcp ljr z,ld_13ld b, #12jp fail_routineld_13: ld l,#0x80ld a,lcp ljr z,ld_14ld b, #13jp fail_routineld_14: ld h,lcp hjr z,ld_15ld b, #14jp fail_routineld_15: ld e,hcp ejr z,ld_16ld b, #15jp fail_routineld_16: ld d,ecp djr z,ld_17ld b, #16jp fail_routineld_17: ld c,dcp cjr z,ld_18ld b, #17jp fail_routineld_18: ld b,ccp bjr z,ld_19ld b, #18jp fail_routineld_19: ld hl,#var1ld a,(hl)cp #0xFFjr z,ld_20ld b, #19jp fail_routineld_20: ld hl,#var2ld a,#0x55ld b,(hl)cp bjr z,ld_21ld a, #20jp fail_routineld b, #20jp fail_routineld_21: ld hl,#var1ld c,(hl)ld a,(hl)cp cjr z,ld_22ld b, #21jp fail_routineld_22: ld hl,#var2ld d,(hl)ld a,(hl)cp djr z,ld_23ld b, #22jp fail_routineld_23: ld hl,#var1ld e,(hl)ld a,(hl)cp ejr z,ld_24ld b, #23jp fail_routineld_24: ld hl,#var2ld a,(hl)ld h,(hl)cp hjr z,ld_25ld b, #24jp fail_routineld_25: ld hl,#var1ld a,(hl)ld l,(hl)cp ljr z,ld_26ld b, #25jp fail_routineld_26: ld ix,#var3ld a,-2(ix)cp #0xFFjr z,ld_27ld b, #26jp fail_routineld_27: ld a,2(ix)cp #0x7Fjr z,ld_28ld b, #27jp fail_routineld_28: ld a,-1(ix)ld b,-1(ix)cp bjr z,ld_29ld b, #28jp fail_routineld_29: cp #0x55jr z,ld_30ld b, #29jp fail_routineld_30: ld a,1(ix)ld c,1(ix)cp cjr z,ld_31ld b, #30jp fail_routineld_31: cp #0xAAjr z,ld_32ld b, #31jp fail_routineld_32: ld d,-2(ix)ld a,-2(ix)cp djr z,ld_33ld b, #32jp fail_routineld_33: cp #0xFFjr z,ld_34ld b, #33jp fail_routineld_34: ld e,2(ix)ld a,2(ix)cp ejr z,ld_35ld b, #34jp fail_routineld_35: cp #0x7Fjr z,ld_36ld b, #35jp fail_routineld_36: ld h,(ix)ld a,(ix)cp hjr z,ld_37ld b, #36jp fail_routineld_37: cp #0x80jr z,ld_38ld b, #37jp fail_routineld_38: ld l,-1(ix)ld a,-1(ix)cp ljr z,ld_39ld b, #38jp fail_routineld_39: cp #0x55jr z,ld_40ld b, #39jp fail_routineld_40: ld iy,#var3ld a,-2(iy)cp #0xFFjr z,ld_41ld b, #40jp fail_routineld_41: ld a,2(iy)cp #0x7Fjr z,ld_42ld b, #41jp fail_routineld_42: ld b,-1(iy)ld a,-1(iy)cp bjr z,ld_43ld b, #42jp fail_routineld_43: cp #0x55jr z,ld_44ld b, #43jp fail_routineld_44: ld c,1(iy)ld a,1(iy)cp cjr z,ld_45ld b, #44jp fail_routineld_45: cp #0xAAjr z,ld_46ld b, #45jp fail_routineld_46: ld d,-2(iy)ld a,-2(iy)cp djr z,ld_47ld b, #46jp fail_routineld_47: cp #0xFFjr z,ld_48ld b, #47jp fail_routineld_48: ld e,2(iy)ld a,2(iy)cp ejr z,ld_49ld b, #48jp fail_routineld_49: cp #0x7Fjr z,ld_50ld b, #49jp fail_routineld_50:ld h,(iy)ld a,(iy)cp hjr z,ld_51ld b, #50jp fail_routineld_51: cp #0x80jr z,ld_52ld b, #51jp fail_routineld_52: ld l,-2(iy)ld a,-2(iy)cp ljr z,ld_53ld b, #52jp fail_routineld_53: cp #0xFFjr z,ld_54ld b, #53jp fail_routineld_54: ld hl,#t_var1ld a,#0xAA+1ld (hl),ald b,(hl)cp bjr z,ld_55ld b, #54jp fail_routineld_55: cp #0xAA+1jr z,ld_56ld b, #55jp fail_routineld_56: ld b,#0x80+1ld (hl),bld a,(hl)cp bjr z,ld_57ld b, #56jp fail_routineld_57: cp #0x80+1jr z,ld_58ld b, #57jp fail_routineld_58: ld c,#0x55-1ld (hl),cld a,(hl)cp cjr z,ld_59ld b, #58jp fail_routineld_59: cp #0x55-1jr z,ld_60ld b, #59jp fail_routineld_60: ld d,#0xFF-1ld (hl),dld a,(hl)cp djr z,ld_61ld b, #60jp fail_routineld_61: cp #0xFF-1jr z,ld_62ld b, #61jp fail_routineld_62: ld e,#0x55+1ld (hl),eld a,(hl)cp ejr z,ld_63ld b, #62jp fail_routineld_63: cp #0x55+1jr z,ld_64ld b, #63jp fail_routineld_64: ld (hl),hld a,(hl)cp hjr z,ld_65ld b, #64jp fail_routineld_65: cp #0x80 ;bjp guess >t_#var1jr z,ld_66ld b, #65jp fail_routineld_66: ld (hl),lld a,(hl)cp ljr z,ld_67ld b, #66jp fail_routineld_67: cp a, #0x00 ;bjp guess <t_#var1jr z,ld_68ld b, #67jp fail_routineld_68: ld ix,#t_var3ld a,#0x55ld -2(ix),ald a,#0ld a,-2(ix)cp #0x55jr z,ld_69ld b, #68jp fail_routineld_69: ld a,#0x80ld 2(ix),ald a,#0ld a,2(ix)cp #0x80jr z,ld_70ld b, #69jp fail_routineld_70: ld b,#0x7Fld -1(ix),bld a,-1(ix)cp bjr z,ld_71ld b, #70jp fail_routineld_71: cp #0x7Fjr z,ld_72ld b, #71jp fail_routineld_72: ld c,#0xAAld 1(ix),cld a,1(ix)cp cjr z,ld_73ld b, #72jp fail_routineld_73: cp #0xAAjr z,ld_74ld b, #73jp fail_routineld_74: ld d,#0x80ld (ix),dld a,(ix)cp djr z,ld_75ld b, #74jp fail_routineld_75: cp #0x80jr z,ld_76ld b, #75jp fail_routineld_76: ld e,#0x55+2ld -2(ix),eld a,-2(ix)cp ejr z,ld_77ld b, #76jp fail_routineld_77: cp #0x55+2jr z,ld_78ld b, #77jp fail_routineld_78: ld h,#0xAA-2ld 2(ix),hld a,2(ix)cp hjr z,ld_79ld b, #78jp fail_routineld_79: cp #0xAA-2jr z,ld_80ld b, #79jp fail_routineld_80: ld l,#0xAA+2ld -1(ix),lld a,-1(ix)cp ljr z,ld_81ld b, #80jp fail_routineld_81: cp #0xAA+2jr z,ld_82ld b, #81jp fail_routineld_82: ld iy,#t_var3ld a,#0xFFld -2(iy),ald a,#0ld a,-2(iy)cp #0xFFjr z,ld_83ld b, #82jp fail_routineld_83: ld a,#0x7Fld 2(iy),ald a,#0ld a,2(iy)cp #0x7Fjr z,ld_84ld b, #83jp fail_routineld_84: ld b,#0x55ld -1(iy),bld a,-1(iy)cp bjr z,ld_85ld b, #84jp fail_routineld_85: cp #0x55jr z,ld_86ld b, #85jp fail_routineld_86: ld c,#0xAAld 1(iy),cld a,1(iy)cp cjr z,ld_87ld b, #86jp fail_routineld_87: cp #0xAAjr z,ld_88ld b, #87jp fail_routineld_88: ld d,#0x80ld (iy),dld a,(iy)cp djr z,ld_89ld b, #88jp fail_routineld_89: cp #0x80jr z,ld_90ld b, #89jp fail_routineld_90: ld e,#0xFF-2ld -2(iy),eld a,-2(iy)cp ejr z,ld_91ld b, #90jp fail_routineld_91: cp #0xFF-2jr z,ld_92ld b, #91jp fail_routineld_92: ld h,#0x7F-3ld 2(iy),hld a,2(iy)cp hjr z,ld_93ld b, #92jp fail_routineld_93: cp #0x7F-3jr z,ld_94ld b, #93jp fail_routineld_94: ld l,#0x55-5ld -1(iy),lld a,-1(iy)cp ljr z,ld_95ld b, #94jp fail_routineld_95: cp #0x55-5jr z,ld_96ld b, #95jp fail_routineld_96: ld hl,#t_var1ld (hl),#0x80+10ld a,(hl)cp #0x80+10jr z,ld_97ld b, #96jp fail_routineld_97: ld ix,#t_var3ld -2(ix),#0x55-10ld a,-2(ix)cp #0x55-10jr z,ld_98ld b, #97jp fail_routineld_98: ld 2(ix),#0x55+10ld a,2(ix)cp #0x55+10jr z,ld_99ld b, #98jp fail_routineld_99: ld iy,#t_var2ld -1(iy),#0x80+17ld a,-1(iy)cp #0x80+17jr z,ld_100ld b, #99jp fail_routineld_100:ld 1(iy),#0x80-17ld a,1(iy)cp #0x80-17jr z,ld_101ld b, #100jp fail_routineld_101: ld hl,#t_var5ld bc,#t_var5ld (hl),#0xAA-10ld a,(bc)cp #0xAA-10jr z,ld_102ld b, #101jp fail_routineld_102: ld hl,#t_var3ld de,#t_var3ld (hl),#0xAA+10ld a,(de)cp #0xAA+10jr z,ld_103ld b, #102jp fail_routineld_103: ld hl,#t_var2ld (hl),#0x7F-25ld a,(t_var2)cp #0x7F-25jr z,ld_104ld b, #103jp fail_routineld_104: ld hl,#t_var4ld bc,#t_var4ld a,#0x55-20ld (bc),ald b,(hl)cp bjr z,ld_105ld b, #104jp fail_routineld_105: ld a,bcp #0x55-20jr z,ld_106ld b, #105jp fail_routineld_106: ld hl,#t_var5ld de,#t_var5ld a,#0x55+20ld (de),ald c,(hl)cp cjr z,ld_107ld b, #106jp fail_routineld_107: ld a,ccp #0x55+20jr z,ld_108ld b, #107jp fail_routineld_108: ld hl,#t_var4ld a,#0xFF-24ld (t_var4),ald e,(hl)cp ejr z,ld_109ld b, #108jp fail_routineld_109: ld a,ecp #0xFF-24jr z,ld_110ld b, #109jp fail_routine; commented out ld_110 so test can continue; may depend on side-effect in original Z80ld_110: ld a, #0x55jp ld_125;ld_110: ld a,#0x55; ld i,a; ld a,#0; ld a,i; jr nz,ld_111ld b, #110jp fail_routine;ld_111: jp p,ld_112ld b, #111jp fail_routine;ld_112: cp #0x55; jr z,ld_113ld b, #112jp fail_routine;ld_113: ld a,#0x80; ld i,a; ld a,#0; ld a,i; jr nz,ld_114ld b, #113jp fail_routine;ld_114: jp m,ld_115ld b, #114jp fail_routine;ld_115: cp #0x80; jr z,ld_116ld b, #115jp fail_routine;ld_116: ld a,#0; ld i,a; ld a,#0x55; ld a,i; jr z,ld_125ld b, #116jp fail_routine; refresh register not implemented; test for ie ?;ld_117: ld a,#0x55; ld r,a; ld a,#0; ld a,r; jp p,ld_118; inc_error_cnt;ld_118: jr nz,ld_119; inc_error_cnt;ld_119: ld a,#0xFF; ld r,a; ld a,#0; ld a,r; jp m,ld_120; inc_error_cnt;ld_120: ld a,4 ;totally sequence dependent; ld r,a; ld a,#0x55; ld a,r; jr z,ld_121; inc_error_cnt;ld_121: ei ;set iff2; ld a,i; jp pe,ld_122 ;iff2 was set; inc_error_cnt;ld_122: di ;clear iff2; ld a,i; jp po,ld_123 ;iff2 was cleared; inc_error_cnt;ld_123: ei ;set iff2; ld a,r; jp pe,ld_124 ;iff2 was set; inc_error_cnt;ld_124: di ;clear iff2; ld a,r; jp po,ld_125 ;iff2 was cleared; inc_error_cnt;ld_125: ld bc,#0x1234ld a, #0x12 ;bjp guess >data_1234cp bjr z,ld_126ld b, #125jp fail_routineld_126: ld a, #0x34 ;bjp guess <data_1234cp cjr z,ld_127ld b, #126jp fail_routineld_127: ld de,#0x55aald a,#0x55cp djr z,ld_128ld b, #127jp fail_routineld_128: ld a,#0xAAcp ejr z,ld_129ld b, #128jp fail_routineld_129: ld hl,#0x7Fffld a,#0x7Fcp hjr z,ld_130ld b, #129jp fail_routineld_130: ld a,#0xFFcp ljr z,ld_131ld b, #130jp fail_routineld_131: ld sp,#0xAA55ld hl,#0add hl,spld a,#0xAAcp hjr z,ld_132ld b, #131jp fail_routineld_132: ld a,#0x55cp ljr z,ld_133ld b, #132jp fail_routineld_133: ld ix,#0xFFffld hl,#0ld sp,ixadd hl,spld a,#0xFFcp hjr z,ld_134ld b, #133jp fail_routineld_134: cp ljr z,ld_135ld b, #134jp fail_routineld_135: ld iy,#0x1234ld hl,#0ld sp,iyadd hl,spld a,#0x12 ;bjp was >data_1234cp hjr z,ld_136ld b, #135jp fail_routineld_136: ld a,#0x34 ;bjp was >data_1234cp ljr z,ld_137ld b, #136jp fail_routineld_137: ld hl,(#w_var2) ;gth changed from ,(w_var2)ld a,#0x55cp hjr z,ld_138ld b, #137jp fail_routineld_138: ld a,#0xAAcp ljr z,ld_139ld b, #138jp fail_routineld_139: ld bc,(#w_var1) ;gth changed from ,(w_var1)ld a,#0x12 ;bjp was >data_1234cp bjr z,ld_140ld b, #139jp fail_routineld_140: ld a,#0x34 ;bjp was >data_1234cp cjr z,ld_141ld b, #140jp fail_routineld_141: ld de,(w_var3)ld a,#0x7Fcp djr z,ld_142ld b, #141jp fail_routineld_142: ld a,#0xFFcp ejr z,ld_143ld b, #142jp fail_routineld_143: ld hl,(w_var4)ld a,#0x80cp hjr z,ld_144ld b, #143jp fail_routineld_144: ld a,#0cp ljr z,ld_145ld b, #144jp fail_routineld_145: ld sp,(w_var5)ld hl,#0add hl,spld a,#0xAAcp hjr z,ld_146ld b, #145jp fail_routineld_146: ld a,#0x55cp ljr z,ld_147ld b, #146jp fail_routineld_147: ld ix,(w_var6)ld hl,#0ld sp,ixadd hl,spld a,#0xFFcp hjr z,ld_148ld b, #147jp fail_routineld_148: cp ljr z,ld_149ld b, #148jp fail_routineld_149: ld iy,(#w_var1)ld hl,#0ld sp,iyadd hl,spld a,#0x12 ;bjp was >data_1234cp hjr z,ld_150ld b, #149jp fail_routineld_150:ld sp, #stack_end ; reset stack pointer to EOMld a,#0x34 ;bjp was >data_1234cp ljr z,ld_151ld b, #150jp fail_routineld_151: ld hl,#0x1234ld (#tw_var1),hlld bc,(#tw_var1)ld a,#0x12 ;bjp was >data_1234cp bjr z,ld_152ld b, #151jp fail_routineld_152: ld a,#0x34 ;bjp was >data_1234cp cjr z,ld_153ld b, #152jp fail_routineld_153: ld bc,#0x55aald (#tw_var2),bcld hl,(#tw_var2)ld a,#0x55cp hjr z,ld_154ld b, #153jp fail_routineld_154: ld a,#0xAAcp ljr z,ld_155ld b, #154jp fail_routineld_155: ld de,#0x7Fffld (tw_var3),deld hl,(tw_var3)ld a,#0x7Fcp hjr z,ld_156ld b, #155jp fail_routineld_156: ld a,#0xFFcp ljr z,ld_157ld b, #156jp fail_routineld_157: ld hl,#0x8000ld (tw_var4),hlld bc,(tw_var4)ld a,#0x80cp bjr z,ld_158ld b, #157jp fail_routineld_158: ld a,#0cp cjr z,ld_159ld b, #158jp fail_routineld_159: ld sp,#0xAA55ld (tw_var5),spld hl,(tw_var5)ld a,#0xAAcp hjr z,ld_160ld b, #159jp fail_routineld_160: ld a,#0x55cp ljr z,ld_161ld b, #160jp fail_routineld_161: ld ix,#0xFFffld (tw_var6),ixld hl,(tw_var6)ld a,#0xFFcp hjr z,ld_162ld b, #161jp fail_routineld_162: cp ljr z,ld_163ld b, #162jp fail_routineld_163: ld iy,#0x1234ld (tw_var7),iyld hl,(tw_var7)ld a,#0x12 ;bjp was >data_1234cp hjr z,ld_164ld b, #163jp fail_routineld_164: ld a,#0x34 ;bjp was >data_1234cp ljr z,ld_165ld b, #164jp fail_routineld_165: ld hl,#0x55aald sp,hlld hl,#0add hl,spld a,#0x55cp hjr z,ld_166ld b, #165jp fail_routineld_166: ld a,#0xAAcp ljr z,end_of_testld b, #166jp fail_routineend_of_test:jp passedvar1: .db #0xFFvar2: .db #0x55var3: .db #0x80var4: .db #0xAAvar5: .db #0x7Fw_var1: .dw #0x1234w_var2: .dw #0x55aaw_var3: .dw #0x7fffw_var4: .dw #0x8000w_var5: .dw #0xaa55w_var6: .dw #0xffff.area _DATAt_var1: .db 0t_var2: .db 0t_var3: .db 0t_var4: .db 0t_var5: .db 0tw_var1: .dw 0tw_var2: .dw 0tw_var3: .dw 0tw_var4: .dw 0tw_var5: .dw 0tw_var6: .dw 0tw_var7: .dw 0
