280
23.04.2025, 11:30 Uhr
HeikoS
|
Hier noch ein „letzter Würfel“ mit dem JKCEMU-Compiler. Mit allen Optimierungen, die hier noch „eingereicht“ wurden:
- Schnelles Bildschirmlöschen (KaiOr) - Compilieren für „Produktiveinsatz“ (Jens) - Zielsystem: KC85/4..5 mit Unterstützung beider Bildspeicher (Jens) [vorher war eingestellt: „KC85/2..5, HC900“, obwohl ich den Screen-Befehl nicht nutze, geht es schneller, wie Jens auch schrieb !] - Zoom-Faktor 3 (Heiko)
Geht schon ab wie „Schmidt’s Katze“ …

Quellcode: | 10 CLS 30 CX = 160 : CY = 128 : REM CENTER SCREEN POS
35 ZO = 3 : REM ZOOM FACTOR (INVERS)
40 DIM PTS(7,2) 50 DIM RZP(7,2) : DIM RYP(7,2) 60 DIM SNE (32) AS INTEGER : REM SIN TABLE
70 GOSUB 5000 : REM INIT CUBE 80 GOSUB 8000 : REM INIT SIN TABLE 90 GOSUB 2000 : REM INIT ARRAY, ROTATE POINTS 95 ASM " CALL INIT_SCREEN"
100 REM --- DRAW LOOP 110 FOR ANGEL=0 TO 15 120 ASM " CALL SWITCH_SCREEN" : REM BUFFER SWITCH 130 ASM " CALL CLF" 140 GOSUB 2000 : REM ROTATE POINTS 150 GOSUB 6000 : REM LINES 160 NEXT ANGEL 170 GOTO 100
2000 REM --- ROTATE POINTS 2001 CS = SNE(ANGEL+16) : REM COS 2010 SN = SNE(ANGEL) : REM SIN 2020 FOR N = 0 TO 7 2030 RZP(N,0) = -CS * PTS(N,0) + SN * PTS(N,1) 2040 RZP(N,1) = SN * PTS(N,0) + CS * PTS(N,1) 2060 RYP(N,0) = ( CS * RZP(N,0)/128 + SN * PTS(N,2)) / ZO + CX 2070 RYP(N,1) = ( RZP(N,1)) / ZO + CY 2120 NEXT N 2130 RETURN
5000 REM --- THE CUBE 5001 PTS(0,0) = -1: PTS(0,1) = -1 : PTS(0,2) = -1 5010 PTS(1,0) = 1: PTS(1,1) = -1 : PTS(1,2) = -1 5020 PTS(2,0) = 1: PTS(2,1) = 1 : PTS(2,2) = -1 5030 PTS(3,0) = -1: PTS(3,1) = 1 : PTS(3,2) = -1 5040 PTS(4,0) = -1: PTS(4,1) = -1 : PTS(4,2) = 1 5050 PTS(5,0) = 1: PTS(5,1) = -1 : PTS(5,2) = 1 5060 PTS(6,0) = 1: PTS(6,1) = 1 : PTS(6,2) = 1 5070 PTS(7,0) = -1: PTS(7,1) = 1 : PTS(7,2) = 1 5080 RETURN
6000 REM --- DRAW LINES 6010 LINE RYP(0,0),RYP(0,1),RYP(1,0),RYP(1,1) 6020 LINE RYP(1,0),RYP(1,1),RYP(2,0),RYP(2,1) 6030 LINE RYP(2,0),RYP(2,1),RYP(3,0),RYP(3,1) 6040 LINE RYP(3,0),RYP(3,1),RYP(0,0),RYP(0,1) 6050 LINE RYP(4,0),RYP(4,1),RYP(5,0),RYP(5,1) 6060 LINE RYP(5,0),RYP(5,1),RYP(6,0),RYP(6,1) 6070 LINE RYP(6,0),RYP(6,1),RYP(7,0),RYP(7,1) 6080 LINE RYP(7,0),RYP(7,1),RYP(4,0),RYP(4,1) 6090 LINE RYP(0,0),RYP(0,1),RYP(4,0),RYP(4,1) 6100 LINE RYP(1,0),RYP(1,1),RYP(5,0),RYP(5,1) 6110 LINE RYP(2,0),RYP(2,1),RYP(6,0),RYP(6,1) 6120 LINE RYP(3,0),RYP(3,1),RYP(7,0),RYP(7,1) 6130 RETURN
8000 REM --- SIN TABLE SNE(0) = &H00 SNE(1) = &H0D SNE(2) = &H19 SNE(3) = &H25 SNE(4) = &H31 SNE(5) = &H3C SNE(6) = &H47 SNE(7) = &H51 SNE(8) = &H5B SNE(9) = &H63 SNE(10) = &H6A SNE(11) = &H71 SNE(12) = &H76 SNE(13) = &H7A SNE(14) = &H7E SNE(15) = &H7F SNE(16) = &H7F SNE(17) = &H7F SNE(18) = &H7E SNE(19) = &H7A SNE(20) = &H76 SNE(21) = &H71 SNE(22) = &H6A SNE(23) = &H63 SNE(24) = &H5B SNE(25) = &H51 SNE(26) = &H47 SNE(27) = &H3C SNE(28) = &H31 SNE(29) = &H25 SNE(30) = &H19 SNE(31) = &H0D RETURN
ASM "INIT_SCREEN:" ASM " LD A,(IX+1)" ASM " RES 0,A" ASM " SET 2,A" ASM " LD (IX+1),A" ASM " OUT (84H), A" ASM " RET"
ASM "SWITCH_SCREEN:" ASM " LD A,(IX+1)" ASM " XOR 00000101B ASM " LD (IX+1),A" ASM " OUT (84H), A" ASM " RET"
ASM "CLF:" ASM " XOR A" :REM Pattern ASM " LD DE,0A800h" :REM Endpunkt ASM " LD C,0Ah" :REM Durchlaeufe ASM " DI" ASM " LD HL,0" ASM " ADD HL,SP" ASM " EX DE,HL" ASM " LD SP,HL" ASM " LD L,A" ASM " LD H,L" ASM "NEXT: LD B,40h" :REM 64 x 16Byte ASM "LOOP: PUSH HL" ASM " PUSH HL" ASM " PUSH HL" ASM " PUSH HL" ASM " PUSH HL" ASM " PUSH HL" ASM " PUSH HL" ASM " PUSH HL" ASM " DJNZ LOOP" ASM " DEC C" ASM " JP NZ,NEXT" ASM " EX DE,HL" ASM " LD SP,HL" ASM " EI" ASM " RET"
|
Dieser Beitrag wurde am 23.04.2025 um 11:37 Uhr von HeikoS editiert. |