; Begin LD IX,07F00H LD SP,07EE3H ; 1: Dim num As Long ; The address of 'num' is IX-4 (7EFCH) ; 2: Dim check As Long ; The address of 'check' is IX-8 (7EF8H) ; 3: Dim temp As Long ; The address of 'temp' is IX-12 (7EF4H) ; 4: ; 5: Dim comp As Short ; The address of 'comp' is IX-13 (7EF3H) ; 6: ; 7: Dim byte0 As Long ; The address of 'byte0' is IX-17 (7EEFH) ; 8: Dim byte1 As Long ; The address of 'byte1' is IX-21 (7EEBH) ; 9: Dim byte2 As Long ; The address of 'byte2' is IX-25 (7EE7H) ; 10: Dim byte3 As Long ; The address of 'byte3' is IX-29 (7EE3H) ; 11: ; 12: 'Output the first few primes ; 13: Put 1, 2 LD A,02H OUT (00H),A ; 14: Put 1, 3 LD A,03H OUT (00H),A ; 15: Put 1, 5 LD A,05H OUT (00H),A ; 16: ; 17: 'Setup ; 18: num = 7 LD BC,0000H LD DE,0007H LD (IX-04H),E LD (IX-03H),D LD (IX-02H),C LD (IX-01H),B ; 19: ; 20: top: L0001: NOP ; 21: comp = 0 LD A,00H LD (IX-0DH),A ; 22: check = 3 LD BC,0000H LD DE,0003H LD (IX-08H),E LD (IX-07H),D LD (IX-06H),C LD (IX-05H),B ; 23: ; 24: primeloop: L0002: NOP ; 25: temp = num Mod check LD E,(IX-04H) LD D,(IX-03H) LD C,(IX-02H) LD B,(IX-01H) PUSH BC PUSH DE LD E,(IX-08H) LD D,(IX-07H) LD C,(IX-06H) LD B,(IX-05H) CALL D102 LD (IX-0CH),E LD (IX-0BH),D LD (IX-0AH),C LD (IX-09H),B ; 26: If temp > 0 Then Goto nextnum LD E,(IX-0CH) LD D,(IX-0BH) LD C,(IX-0AH) LD B,(IX-09H) PUSH BC PUSH DE LD BC,0000H LD DE,0000H CALL C102 JP C,L0006 JP Z,L0006 JP L0003 L0006: NOP ; 27: comp = 1 'Found a composite LD A,01H LD (IX-0DH),A ; 28: nextnum: L0003: NOP ; 29: temp = check + check LD E,(IX-08H) LD D,(IX-07H) LD C,(IX-06H) LD B,(IX-05H) PUSH BC PUSH DE LD E,(IX-08H) LD D,(IX-07H) LD C,(IX-06H) LD B,(IX-05H) CALL A101 LD (IX-0CH),E LD (IX-0BH),D LD (IX-0AH),C LD (IX-09H),B ; 30: If temp > num Then Goto skipout LD E,(IX-0CH) LD D,(IX-0BH) LD C,(IX-0AH) LD B,(IX-09H) PUSH BC PUSH DE LD E,(IX-04H) LD D,(IX-03H) LD C,(IX-02H) LD B,(IX-01H) CALL C102 JP C,L0007 JP Z,L0007 JP L0004 L0007: NOP ; 31: If comp = 1 Then Goto skipout LD A,(IX-0DH) LD L,01H SUB L JP NZ,L0008 JP L0004 L0008: NOP ; 32: check = check + 2 LD E,(IX-08H) LD D,(IX-07H) LD C,(IX-06H) LD B,(IX-05H) PUSH BC PUSH DE LD BC,0000H LD DE,0002H CALL A101 LD (IX-08H),E LD (IX-07H),D LD (IX-06H),C LD (IX-05H),B ; 33: Goto primeloop JP L0002 ; 34: ; 35: skipout: L0004: NOP ; 36: If comp = 1 Then Goto skip2 LD A,(IX-0DH) LD L,01H SUB L JP NZ,L0009 JP L0005 L0009: NOP ; 37: 'Output the 32-bit long as four bytes ; 38: '**OPTIMIZED IN ASSEMBLY** ; 39: temp = num LD A,(7EFCh) OUT (00h),A LD A,(7EFDh) OUT (01h),A LD A,(7EFEh) OUT (02h),A LD A,(7EFFh) OUT (03h),A NOP ;To add a breakpoint ; 51: skip2: L0005: NOP ; 52: num = num + 2 LD E,(IX-04H) LD D,(IX-03H) LD C,(IX-02H) LD B,(IX-01H) PUSH BC PUSH DE LD BC,0000H LD DE,0002H CALL A101 LD (IX-04H),E LD (IX-03H),D LD (IX-02H),C LD (IX-01H),B ; 53: ; 54: Goto top JP L0001 ; 55: ; End of program HALT ; Long Addition Routine A101: EXX POP HL POP DE POP BC PUSH HL EXX EXX LD A,E EXX ADD A,E LD E,A EXX LD A,D EXX ADC A,D LD D,A EXX LD A,C EXX ADC A,C LD C,A EXX LD A,B EXX ADC A,B LD B,A RET ; Long Division Routine D104: XOR A SUB E LD E,A LD A,00H SBC A,D LD D,A LD A,00H SBC A,C LD C,A LD A,00H SBC A,B LD B,A RET D102: EXX POP HL POP DE POP BC PUSH HL EXX PUSH HL CALL D103 EXX POP HL RET D101: EXX POP HL POP DE POP BC PUSH HL EXX PUSH HL CALL D103 POP HL RET D103: EXX LD A,B EXX XOR B EXX LD A,B PUSH AF BIT 7,B CALL NZ,D104 EXX BIT 7,B CALL NZ,D104 CALL D105 POP AF JP P,D106 LD L,A CALL M,D104 LD A,L D106: OR A RET P EXX CALL D104 EXX RET D105: EXX PUSH BC LD B,D LD C,E EXX EX DE,HL LD D,B LD E,C POP BC PUSH HL LD HL,0000H EXX POP DE LD HL,0000H LD A,20H OR A D108: RL C RL B EXX RL C RL B EXX ADC HL,HL EXX ADC HL,HL EXX SBC HL,DE EXX SBC HL,DE EXX JR NC,D107 ADD HL,DE EXX ADC HL,DE EXX D107: CCF DEC A JR NZ,D108 RL C RL B EXX RL C RL B EXX LD D,B LD E,C PUSH HL EXX POP DE PUSH BC LD B,H LD C,L EXX POP BC RET ; Long Comparison Routine C101: EXX POP HL POP DE POP BC PUSH HL EXX C105: EXX LD A,E EXX SUB E LD E,A EXX LD A,D EXX SBC A,D LD D,A EXX LD A,C EXX SBC A,C LD C,A EXX LD A,B EXX SBC A,B LD B,A JR C,C103 OR C OR D OR E RET C103: RET NZ INC A RET C102: EXX POP HL POP DE POP BC PUSH HL EXX LD A,B EXX XOR B JP M,C104 EXX CALL C105 RET C104: XOR B AND 80H CP 7FH RET ; End of listing .END