259
Heute, 13:51 Uhr
HeikoS
|
@Ralle:
Ja, aber warum erzeugt der KC85/3/4 ein feindliches PAL-Signal ... ;-)
Nach dem Tipp von Volker zum Basic-Compiler im JKCEMU hatte ich gleich mal ein paar Tests dazu gemacht. Tolles Werkzeug !
Das Bsp. hier : https://thecodingtrain.com/challenges/175-3D-cube-applesoft-basic sollte doch eigentlich laufen, dachte ich. Etwas umgebaut: SIN-Tabelle, Datentyp INTEGER und alles Überflüssige in der Berechnung entfernt, waren notwendig. Double Buffer kann der KC85 4/5 auch.

Wer es mal ausprobieren möchte, kann den Quelltext im Programmier-Fenster vom JKCEMU laden, eine BIN/KCC-Datei mit dem Compiler erzeugen und es auf echter HW ausprobieren.

Es ist langsamer als ich dachte, aber das liegt auch an den nicht so schnellen Grafik-Routinen, die der Compiler einbindet. Kann man gut sehen, wenn man den Zoom-Faktor mal ändert, z.B.: „ZO = 4“. Dann gibt es einen kleineren Würfel, der sich schneller dreht.
Grüße, Heiko
Quellcode: | 10 CLS 30 CX = 160 : CY = 128 : REM CENTER SCREEN POS
35 ZO = 2 : 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 CLS 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 A, 00000101B ASM " LD (IX+1),A" ASM " OUT (84H), A" ASM " RET"
|
Dieser Beitrag wurde am 18.04.2025 um 14:36 Uhr von HeikoS editiert. |