.EXTERN ALL test_addr_0: MOV #what_address,R0 CALL print_start ; address mode 0 ; b1010101001010101 ; 16 bit put/get MOV #43605.,R0 CMP #43605.,R0 BEQ test_addr_0a_ok MOV #1.,R0 JMP test_addr_fail test_addr_0a_ok: ; 8 bit put / 16 bit get, should sign extend MOVB #240.,R0 CMP #65520.,R0 BEQ test_addr_0b_ok MOV #2.,R0 JMP test_addr_fail test_addr_0b_ok: ; 8 bit put / 16 bit get, should sign extend MOVB #127.,R0 CMP #127.,R0 BEQ test_addr_0c_ok MOV #3.,R0 JMP test_addr_fail test_addr_0c_ok: test_addr_1: ; address mode 1 ; indirect get 16 bit MOV #v1234,R0 MOV (R0),R1 CMP #1234.,R1 BEQ test_addr_1a_ok MOV #4.,R0 JMP test_addr_fail test_addr_1a_ok: ; indirect get 8 bit, sign extended MOV #v1234,R0 MOVB (R0),R1 CMP #65490.,R1 BEQ test_addr_1b_ok MOV #5.,R0 JMP test_addr_fail test_addr_1b_ok: ; indirect get 16 bit MOV #v1234,R0 MOVB (R0),R1 CMP #1234.,R1 BNE test_addr_1c_ok MOV #6.,R0 JMP test_addr_fail test_addr_1c_ok: test_addr_2: ; address mode 2 ; value did not change MOV #v1234,R0 MOV (R0)+,R1 CMP #1234.,R1 BEQ test_addr_2a1_ok MOV #7.,R0 JMP test_addr_fail ; test_addr_2a1_ok: ; address increased 2 bytes MOV #v1234after,R2 CMP R0,R2 BEQ test_addr_2a2_ok MOV #8.,R0 JMP test_addr_fail test_addr_2a2_ok: ; value did not change MOV #v1234,R0 MOVB (R0)+,R1 CMPB #210.,R1 BEQ test_addr_2b1_ok MOV #9.,R0 JMP test_addr_fail test_addr_2b1_ok: ; test if this pdp-11 has the hw-bug MOV #v1234,R0 MOV (R0)+,R0 CMP #1234.,R0 BEQ test_addr_2b2_ok MOV #10.,R0 JMP test_addr_fail test_addr_2b2_ok: test_addr_3: ; verify contents of addr1234 first MOV addr1234,r0 CMP #1234.,(R0) BEQ test_addr_3b_verify_ok MOV #12.,R0 JMP test_addr_fail test_addr_3b_verify_ok: MOV @(R0)+,R1 MOV #v1234after,R2 CMP R0,R2 BEQ test_addr_3b2_ok MOV #13.,R0 JMP test_addr_fail test_addr_3b2_ok: test_addr_4: ; TODO ; address mode 4 ; value did not change MOV #v1234,R0 MOV -(R0),R1 CMP #4455.,R1 BEQ test_addr_4a1_ok MOV #14.,R0 JMP test_addr_fail ; test_addr_4a1_ok: ; address drecreased 2 bytes MOV #v4455before,R2 CMP R0,R2 BEQ test_addr_4a2_ok MOV #15.,R0 JMP test_addr_fail test_addr_4a2_ok: ; value did not change MOV #v1234,R0 MOVB -(R0),R1 CMPB #17.,R1 BEQ test_addr_4a3_ok MOV #16.,R0 JMP test_addr_fail test_addr_4a3_ok: test_addr_5: ; TODO test_addr_6: MOV #v1234,R0 MOV 2(R0),R1 CMP #4321.,R1 BEQ test_addr_6_ok MOV #17.,R0 JMP test_addr_fail test_addr_6_ok: test_addr_7: ; index deferred MOV #addr1234,R0 MOV @2(R0),R1 CMP #4321.,R1 BEQ test_addr_7_ok MOV #18.,R0 JMP test_addr_fail test_addr_7_ok: RET test_addr_fail: CALL print_binary MOV #test_addr_fail_txt,R0 CALL print_start RET test_addr_fail_txt: .ASCII "addressing handling FAIL\r\n\x00" what_address: .ASCII "addressing tests\r\n\x00" .EVEN v4455before: DW 4455. v1234: DW 1234. v1234after: DW 4321. addr1234: DW v1234 addr1234after: DW v1234after test_addr: CALL test_addr_0 RET