IRQ-Kurs von Ivo Herzeg aus der Magic Disk


  • Ingo
  • 7600 Aufrufe 58 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ok,
    unten ist das listing und prg-file.
    zu erklärung.

    $1000-101e: simple irq-init routine
    $101f-1037: teil 1 des double-irq um ein stabilen raster zu bekommen.
    $1038-104c:teil 2 des double-irq. aber hier flacker der raster nicht mehr.

    so...ab $1055 beginnt die eigentliche routine.
    und was macht die?
    wir gehen davon aus, dass eine "normal" rasterzeile 63 zyklen, und eine badline (in der die neuen zeichen für die nächste zeile geholt werden) 20 zyklen hat.
    d.h. wenn ich die hintergrundfarbe eine zeile vor der badline mittem im bildschrim wechsle (z.b. auf hellgrau schalte) und genau 83 zyklen später wieder auf blau zurück schalte bekomme ich einen Raster, der genau 2 zeilen hoch ist und horizontal betrachtet genau untereinander die farbe wechselt (sieht dann aus, als hätte der raster einen knick).

    genau das macht die routine ab $1055.
    erst wird die hintergrundfarbe auf hellgrau geschaltet.
    dann kommen einige "verzögerungsbefehle".... 35 x NOP = 70 Zyklen, 1 x LDA 07F8 = 4 Zyklen, 1 x BIT 00 = 3 Zyklen und dann nicht die 6 Zyklen für das zurückschalten der Hintergrundfarbe vergessen (nur einmal).... sind insgesammt: 70+4+3+6=83 Zyklen....

    soweit ist ja alles noch einfach.

    Doch nun schauen wir und diesen LDA 07F8 mal genauer an, und warum der so "unmotiviert" zwischen all den NOPs steht :)
    die Adresse (07F8 ) ansich ist egal, könnte auch jede andere sein.
    wichtig ist die "zeitliche" position und die Art des Befehls.
    Leute die sich genauer mit Assembler befassen wissen, dass so ein LDA genausoviel Zyklen braucht wie ein STA. Nämlich genau 4 Zyklen.
    Ändert man nun den LDA in ein STA dürfte sich eigentlich am Timing nichts ändern, und der Raster genauso aussehen wie vorher.
    TUT ER ABER NICHT!!!!
    Wir sehen, dass nun 1 Zyklus früher wieder auf Blau zurückgeschaltet wird.
    Das liegt daran, dass der STA eben genau an der Schwelle liegt, an der die CPU für das einlesen der neuen Zeichen (Badline) für 43 Zyklen angehalten wird.
    Nur ein SCHREIBBEFEHL kann eben noch 1 Zyklus ausführen....(ein Ladezyklus dagegen nicht).
    Daher könnte man meinen, man hat in einer Badline 21 Zyklen zur Verfügung, oder der STA braucht plötzlich nur noch 3 zyklen...

    So, ich hoffe ich habe nun nicht allzuviele hier verwirrt :juhu: :nixwiss:

    ps: Das selbe Phänomen gibt es mit den DEC,INC, ASL....usw Befehlen, die eigentlich 6 Zyklen brauchen, an dieser Schwelle (die es auch beim Beginn der Spriteverzögerung der CPU gibt) plötzlich nur noch 4 Zyklen brauchen....

    Quellcode

    1. .C:1000 78 SEI
    2. .C:1001 A9 01 LDA #$01
    3. .C:1003 8D 1A D0 STA $D01A
    4. .C:1006 8D 0D DC STA $DC0D
    5. .C:1009 A9 1B LDA #$1B
    6. .C:100b 8D 11 D0 STA $D011
    7. .C:100e A9 38 LDA #$38
    8. .C:1010 8D 12 D0 STA $D012
    9. .C:1013 A9 1F LDA #$1F
    10. .C:1015 8D 14 03 STA $0314
    11. .C:1018 A9 10 LDA #$10
    12. .C:101a 8D 15 03 STA $0315
    13. .C:101d 58 CLI
    14. .C:101e 60 RTS
    15. .C:101f A9 39 LDA #$39
    16. .C:1021 8D 12 D0 STA $D012
    17. .C:1024 A9 38 LDA #$38
    18. .C:1026 8D 14 03 STA $0314
    19. .C:1029 EE 19 D0 INC $D019
    20. .C:102c 58 CLI
    21. .C:102d EA NOP
    22. .C:102e EA NOP
    23. .C:102f EA NOP
    24. .C:1030 EA NOP
    25. .C:1031 EA NOP
    26. .C:1032 EA NOP
    27. .C:1033 EA NOP
    28. .C:1034 EA NOP
    29. .C:1035 4C 2D 10 JMP $102D
    30. .C:1038 BA TSX
    31. .C:1039 8A TXA
    32. .C:103a 18 CLC
    33. .C:103b 69 06 ADC #$06
    34. .C:103d AA TAX
    35. .C:103e 9A TXS
    36. .C:103f 24 00 BIT $00
    37. .C:1041 A9 1F LDA #$1F
    38. .C:1043 8D 14 03 STA $0314
    39. .C:1046 AD 12 D0 LDA $D012
    40. .C:1049 C9 39 CMP #$39
    41. .C:104b F0 00 BEQ $104D
    42. .C:104d A9 38 LDA #$38
    43. .C:104f 8D 12 D0 STA $D012
    44. .C:1052 EE 19 D0 INC $D019
    45. .C:1055 A9 0F LDA #$0F
    46. .C:1057 8D 21 D0 STA $D021
    47. .C:105a EA NOP
    48. .C:105b EA NOP
    49. .C:105c EA NOP
    50. .C:105d EA NOP
    51. .C:105e EA NOP
    52. .C:105f EA NOP
    53. .C:1060 EA NOP
    54. .C:1061 EA NOP
    55. .C:1062 EA NOP
    56. .C:1063 EA NOP
    57. .C:1064 EA NOP
    58. .C:1065 EA NOP
    59. .C:1066 EA NOP
    60. .C:1067 EA NOP
    61. .C:1068 EA NOP
    62. .C:1069 EA NOP
    63. .C:106a EA NOP
    64. .C:106b EA NOP
    65. .C:106c EA NOP
    66. .C:106d EA NOP
    67. .C:106e EA NOP
    68. .C:106f EA NOP
    69. .C:1070 EA NOP
    70. .C:1071 EA NOP
    71. .C:1072 AD FF 07 LDA $07FF
    72. .C:1075 EA NOP
    73. .C:1076 EA NOP
    74. .C:1077 EA NOP
    75. .C:1078 EA NOP
    76. .C:1079 EA NOP
    77. .C:107a EA NOP
    78. .C:107b EA NOP
    79. .C:107c EA NOP
    80. .C:107d EA NOP
    81. .C:107e EA NOP
    82. .C:107f EA NOP
    83. .C:1080 24 00 BIT $00
    84. .C:1082 A9 06 LDA #$06
    85. .C:1084 8D 21 D0 STA $D021
    86. .C:1087 4C 31 EA JMP $EA31
    Alles anzeigen
    Dateien
    • cycle.prg

      (140 Byte, 38 mal heruntergeladen, zuletzt: )
  • Hier, was ich irgendwann mal im CF zu IRQ's geschrieben habe. Ich hab jetzt nur so CF-Typische Kürzel rausgenommen und sonst nichts überarbeitet/kontrolliert. Vielleicht sind ja Bugs drin, aber zumindest damals war ich mir recht sicher, was ich da schreibe
    Dateien
    • IRQ-Kurs.zip

      (6,7 kB, 64 mal heruntergeladen, zuletzt: )
    Vollmond war gestern!
  • @Roland

    Ich habe mir mal das Diagramm aus dem VIC-Artikel
    vom Andreas Grützmann angesehen.
    Also 40 Zyklen braucht der VIC in einer Bad Line.
    Dann sind da noch die 3 Takte für die Busübernahme.
    D.h. also, die Zyklen können von 40 bis 43 schwanken,
    je nachdem, was für ein Befehl an dieser Schwelle ausgeführt wird.

    Bei einem Lesebefehl ist's klar, da wird der Prozessor
    direkt unterbrochen und die Zyklen liegen bei 43, der
    Prozessor hat dann noch 20 - richtig?
    Und bei einem Schreibbefehl? Der wird ja angeblich noch ausgeführt.
    Aber wie, wenn der doch bis zu 6 Zyklen braucht???
  • Es dreht sich weniger um die Art des Befehls als darum, was denn der Befehl so auf dem Bus veranstaltet. Ein Befehl wie "Sta 1024" braucht 4 Takte. Die ersten 3 sind Lesetakte für die 3 Bytes des Befehls an sich, nur der 4. Takt ist ein Schreibtakt, der noch ausgeführt wird. Befehle wie "Inc 1024" haben aus technischen Gründen 2 Schreibtakte, ein JSR sowieso, und ein BRK müsste 3 haben. Die Vorgänge zu den einzelnen Takten sind im AAY64 gut aufgeschlüsselt, musst Du mal reingucken, hab die nicht alle im Kopf.
    Vollmond war gestern!
  • Originally posted by Krill
    cbmhardware schrieb:
    Zum Rumhaengen im IRC hat heute kaum noch jemand Zeit. In den Foren ist es auch immer eher muehsam, dem Richtigen etwas aus der Nase zu ziehen.


    Also... das würd ich so ganz und gar nicht sagen. Schau mal nach #c-64 im IRCnet oder im EFnet


    Oh, hallo Krill! Dich habe ich hier ja noch gar net gesehen. Schön dich zu lesen. :)
    Gibt's eigentlich Pläne die 1x Years Plush noch irgendwann zu releasen? Zur X vielleicht, das wäre doch ein guter Zeitpunkt. Habe auch schon immerhin 1,5 Parts fertig. :D

    PS an cbmhardware: weiss zwar net worum es ging, aber ich hänge hin und wieder im channel #comballradio (irc.comballradio.de) herum. Wäre ja schlimm wenn man nicht mal mehr genug Zeit zum idlen hätte...
  • Original von trifox
    ehm,, wo gibts jetzt nochmal das pdf zu dem kurs ?!?!??! 8)


    Ja, ich frage da auch mal bescheiden nach.
    In der Download-Ecke wurde ich mal nicht fündig.

    -- Thomas
  • Hi Krill ;)

    sry aber 2 Deiner Links funktionieren nicht :

    Bei dem ersten ist die Site under Construction, und bei dem zweiten (der auf deutsch) funzt gar nix mehr.
    Könntest Du das checken wenn Du Zeit hast das würde mich sehr interessieren !

    Danke vorab ...
    ;)
    Spindizzy
  • Ja,ja,ja... alter Thread und so... :whistling:
    Hat jemand noch diese PDFs? Oder sogar einen Scan? Finde das nirgends auf der Filebase oder F64 Platte.

    Bevor wieder jemand mit dem Vorschlag kommt: Ich kenne natürlich diese Webseite, aber dort sind keine Scans drauf.
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki
  • syshack schrieb:

    Ja,ja,ja... alter Thread und so... :whistling:
    Hat jemand noch diese PDFs? Oder sogar einen Scan? Finde das nirgends auf der Filebase oder F64 Platte.

    Bevor wieder jemand mit dem Vorschlag kommt: Ich kenne natürlich diese Webseite, aber dort sind keine Scans drauf.

    Äh, bevor Du Dir 'nen Wolf suchst: die MD64 war ein Diskmagazin, da gibt's nix zu "scannen" - außer die Coverhüllen ;-)
  • Danke, mir ist schon klar, dass es kein vollwertiges Printmagazin war.
    Aber ich dachte, es hätte noch ein paar Seiten Papier begleitend gehabt.
    Zumindest ist das so bei den anderen 1995er Ausgaben so auf der F64 Platte... :gruebel
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki
  • syshack schrieb:

    Danke, mir ist schon klar, dass es kein vollwertiges Printmagazin war.
    Aber ich dachte, es hätte noch ein paar Seiten Papier begleitend gehabt.
    Zumindest ist das so bei den anderen 1995er Ausgaben so auf der F64 Platte... :gruebel

    Weiß nicht mehr genau, wie es in der "Spätphase" war - da haben die glaube ich einfach nur noch alten Content unter dem Namen "Magic Disk Classic" wiederaufgelegt. Davor lag die Disk 'ne zeitlang einfach der Playtime bei.
    Zur Zeit vom Interruptkurs (Start 6/90) war es ein reines Diskmagazin.
    Die Cover der "regulären Ausgaben" bis 1993 findet man komplett auf Kultboy. Auf der "Rückseite" war häufig nur noch eine Seite Werbung, die dort bei den Scans fehlt.

    Hier die Infos dazu ausm C64 Wiki:
    Die "Magic Disk 64" war ein reines deutschsprachiges Diskettenmagazin für den Commodore 64, dass im CP Verlag (Computer Publications GmbH) von 12/1987 (27.11.1987) bis 11/1993 eigenständig erschien. Die 5,25"-Programmdiskette lag in einem entsprechenden "Magic Disk 64"-Umschlag mit Pappe und wurde am Kiosk bundesweit verkauft.
    Mit der Ausgabe 12/1993 wurde die "Magic Disk 64" mit dem Diskettenmagazin "Game On" zusammengelegt und mit der Computerspielezeitschrift "Play Time" gebundelt als "C64 Three in One Kombi" verkauft, d.h. es gab 2 Disketten und eine Spielemagazin für verschiedenen Systeme zu einem Preis. Das reine Diskettenmagazin "Magic Disk 64" wurde mit Ausgabe 07/1995 eingestellt.

    Danach startete der Verlag den Versuch unter dem Namen "Magic Disk Classic 64" eine C64-Zeitschrift mit Heftdiskette herauszugeben. Es sind hier die monatlichen Ausgaben 08/1995 bis 01/1996 erschienen.

    Quelle: c64-wiki.de/index.php/Magic_Disk_64

    EDIT: im Wiki sieht man auch, dass der IRQ-Kurs 1993-1995 nochmal lief. Das allerdings auch zur reinen Diskmag-Zeit als Beigabe zur Playtime.