Bildschirmaufteilung auf dem C16/116/Plus4 mit $ff0b statt $d012...?!?

  • Bildschirmaufteilung auf dem C16/116/Plus4 mit $ff0b statt $d012...?!?

    Hmmm... wollte auf dem Plus4 den Bildschirm aufteilen wie auf dem C64 via $d012.

    Egal welchen Wert ich im IRQ in $ff0b schreibe, erscheint z.B. mein Rasterbar trotzdem immer am unteren Bildschirmende wo der Rahmen anfängt.

    Was mache ich falsch?
    Gruß & Kuss zum Wochenschluss,
    Holy Moses/Role

    m.youtube.com/watch?v=iMtYBzMCYhQ
  • Inwiefern steht denn deine Interrupt-Routine für sich?

    Wenn Du wieder in die Original-Routine im KERNAL zurückspringst (wegen Tastaturabfrage u.ä.) - da wird der Rasterinterrupt auch genutzt und stellt dir ggfs. $FF0A/$FF0B wieder auf Standardwerte.

    Unter anderem realisiert der Rechner so ja GRAPHIC 2 und GRAPHIC 4 mit den 5 Zeilen Text unten, eben über zwei Raster-IRQs.
  • mc71 schrieb:

    die IRQ-Routine setzt die Rasterzeile aktiv neu.
    Jo.

    HOLY MOSES/ROLE schrieb:

    Was mache ich falsch?
    Die zwei Befehle im ROM bei $CE58 und $CE5A sind deine Feinde.

    Wie ich im ersten Post schon geschrieben hab: die Interrupt-Routine im KERNAL funkt dir aktiv dazwischen, solange Du sie mit in deine Interrupt-Routine hineinnimmst, bzw. bei einem einfachen Polling ihre Ausführung zuläßt.

    Schau dir in einem guten ROM-Listing mal die Interrupt-Routine ab $CE00 an und dann bau mit dieser Grundlage eine eigene Interrupt-Routine neu, die den Raster-Interrupt unter voller Kontrolle hat.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mike ()

  • Sorry, ich versteh nur Bahnhof.

    Es geht eigentlich nur darum, die Funktion von $d012 (C64) auf dem Plus4 zu übertragen.

    Ich werde dann wohl weiter experimentieren und vieleicht eine Lösung des Problems finden. Ich werde dies dann hier posten, für den Fall, das jemand mal in eine ähnliche Problematik gerät, und kein Revers Engineering des ebenso genialen wie lausigen Betriebssystem des Plus4 betreiben möchte.
    Gruß & Kuss zum Wochenschluss,
    Holy Moses/Role

    m.youtube.com/watch?v=iMtYBzMCYhQ
  • Ich hatte vor einiger Zeit auch mal etwas mit dem P4 experimentiert. Vielleicht kannst Du damit etwas anfangen ?


    Brainfuck-Quellcode

    1. !to "p4_rirq.prg",cbm
    2. TEDGraph1 = $FF06 ; $FF06: TED Graphic-Register 1
    3. TEDGraph2 = $FF07 ; $FF07: TED Graphic-Register 2
    4. TEDKLatch = $FF08 ; $FF08: TED Keyboard Latch
    5. TEDIRQ = $FF09 ; $FF09: TED IRQ Status Register
    6. TEDIRQM = $FF0A ; $FF0A: TED IRQ Mask Register
    7. TEDIRQR = $FF0B ; $FF0B: TED Raster IRQ Register
    8. TEDCUR_H = $FF0C ; $FF0C: TED Cursor H
    9. TEDCUR_L = $FF0D ; $FF0D: TED Cursor L
    10. TEDSND1 = $FF0E ; $FF0E: TED Sound Voice #1 L
    11. TEDSND2 = $FF0F ; $FF0F: TED Sound Voice #2 L
    12. TEDSND1H = $FF10 ; $FF10: TED Sound Voice #1 H
    13. TEDSND = $FF11 ; $FF11: TED Sound Volume,on/off,Wave,D/A
    14. TEDREG = $FF12 ; $FF12: TED Register
    15. TEDREGA = $FF13 ; $FF13: TED Register
    16. TEDVRAM = $FF14 ; $FF14: TED Video-RAM
    17. TEDBACK = $FF15 ; $FF15: Background-Color
    18. TEDCOL1 = $FF16 ; $FF16: TED Color 1
    19. TEDCOL2 = $FF17 ; $FF17: TED Color 2
    20. TEDCOL3 = $FF18 ; $FF18: TED Color 3
    21. TEDFRAME = $FF19 ; $FF19: TED FRAME
    22. TEDCHARH = $FF1A ; $FF1A: TED Char Position H
    23. TEDRASTH = $FF1C ; $FF1C: TED Rasterline H
    24. TEDRASTL = $FF1D ; $FF1D: TED Rasterline L
    25. TEDRASTC = $FF1E ; $FF1E: TED Rastercolumn
    26. TEDRASTV = $FF1F ; $FF1F: TED Raster vertical
    27. TEDROM = $FF3E ; $FF3E: TED ROM ON
    28. TEDRAM = $FF3F
    29. *= $2000
    30. ;--------------------------------------------------
    31. ; Commodore 16 - TED Rastersplit
    32. ;--------------------------------------------------
    33. screen=$0c00
    34. sei
    35. lda #$70
    36. sta $a0
    37. lda #$93
    38. jsr $ffd2
    39. ldx #$00
    40. - lda text,x
    41. sta $0c00+160,x
    42. lda text1,x
    43. sta $0c00+800,x
    44. inx
    45. cpx #$28
    46. bne -
    47. lda #<rasterirq
    48. sta $0314
    49. lda #>rasterirq
    50. sta $0315
    51. cli
    52. jmp*
    53. rasterirq: lda $a0
    54. cmp #$01
    55. beq +
    56. dec $a0
    57. + lda TEDREG
    58. and #$fb
    59. sta TEDREG
    60. lda TEDREGA ; ram charset $1000
    61. and #$03
    62. ora #$18
    63. sta TEDREGA
    64. lda #$f1
    65. lda TEDGraph2
    66. ora #$90
    67. sta TEDGraph2
    68. sta TEDBACK
    69. sta TEDFRAME
    70. - ldx TEDRASTL ; splitline
    71. cpx #$70
    72. bne -
    73. nop
    74. nop
    75. nop
    76. nop
    77. nop
    78. nop
    79. nop
    80. nop
    81. nop
    82. nop
    83. nop
    84. nop
    85. nop
    86. nop
    87. nop
    88. lda #$c4
    89. sta TEDREG
    90. lda #$d0 ; rom charset $d000
    91. sta TEDREGA
    92. lda TEDGraph2
    93. and #$00
    94. ora #$08
    95. sta TEDGraph2
    96. lda #$94
    97. sta TEDBACK
    98. sta TEDFRAME
    99. - ldx TEDRASTL
    100. cpx #$ff ; endline
    101. bne -
    102. endirq: jmp $fcc3
    103. text: !scr " W scramble ram charset just ripped W "
    104. text1: !scr " rom charset at $d000 for second part "
    105. *=$1000
    106. !bin "scramblezs",,2
    Alles anzeigen
    Sieht dann so aus:

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von cbmhardware ()

  • Gerrit, es gibt auch beim VIC-II am C64 ein 9. Bit für die Rasterzeile, es ist in $D011 gespeichert. Das hat mit der Problematik hier überhaupt nichts zu tun.

    HOLY MOSES, dir wurde ja jetzt von cbmhardware eine Lösung auf dem Silbertablett präsentiert.

    HOLY MOSES/ROLE schrieb:

    Es geht eigentlich nur darum, die Funktion von $d012 (C64) auf dem Plus4 zu übertragen.
    Da brauchst Du nichts weiter zu tun, der TED gibt das schon her. Es gibt nur halt noch einen weiteren Nutzer ...

    HOLY MOSES/ROLE schrieb:

    und kein Revers Engineering des ebenso genialen wie lausigen Betriebssystem des Plus4 betreiben möchte.
    ... und das ist das "geniale wie lausige Betriebssystem des Plus/4"! Was ist eigentlich so schwer daran zu verstehen, daß sich dein Programm und der KERNAL um eben dieses Register streiten, in dem den Auslösezeile für den Raster-IRQ vermerkt wird?

    Auf dem C64 wird $D012 vom KERNAL nicht angeschaut (nur 'versehentlich' mit initialisiert beim Reset, und deswegen macht dir beim C64 der KERNAL die Benutzung von Raster-Interrupts nicht streitig - höchstens das gemeinsame Auftreten eines Timer-Interrupts vom CIA muß man sinnvoll handhaben (oder die Timer-Interrupts eben ausschalten).

    Beim C16/C116/+4 laufen sowohl Tastatur, Uhrzeit als eben auch die Raster-Effekte (sprich: geteilter Grafik-/Textbildschirm) über den Raster-Interrupt. Der KERNAL hat hier also solange das Sagen, wie Du die originale Interrupt-Routine noch mitlaufen läßt.

    ...

    Jegliche weitere Bemerkung von dir, daß Du kein Interesse daran hast, dich da mal in die Details einzulesen, bringt dich auf meine Ignore-Liste. Aus dem Thread hier bin ich jetzt auf jeden Fall raus.


    Edit:

    Gerrit schrieb:

    Das war mir nicht bekannt, ich dachte für Tastatur und Uhrzeit würde der KERNAL im Plus/4 einen der 3 Timer die TED bereitstellt verwenden.
    Hast PN.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mike ()

  • cbmhardware schrieb:

    Ich hatte vor einiger Zeit auch mal etwas mit dem P4 experimentiert. Vielleicht kannst Du damit etwas anfangen ?


    Super, vielen Dank für dieses lebendige, tolle Bespiel. Werde mir das unbedingt mal live am +4 zu Gemüte führen.


    Komischerweise nutzt Du "TEDIRQM" und "TEDIRQR" (also $ff0a und $ff0b) garnicht.



    Das wird mir sicher weiterhelfen es zu verstehen.


    Brainfuck-Quellcode

    1. !to "p4_rirq.prg",cbm
    2. TEDGraph1 = $FF06 ; $FF06: TED Graphic-Register 1
    3. TEDGraph2 = $FF07 ; $FF07: TED Graphic-Register 2
    4. TEDKLatch = $FF08 ; $FF08: TED Keyboard Latch
    5. TEDIRQ = $FF09 ; $FF09: TED IRQ Status Register
    6. TEDIRQM = $FF0A ; $FF0A: TED IRQ Mask Register
    7. TEDIRQR = $FF0B ; $FF0B: TED Raster IRQ Register
    8. TEDCUR_H = $FF0C ; $FF0C: TED Cursor H
    9. TEDCUR_L = $FF0D ; $FF0D: TED Cursor L
    10. TEDSND1 = $FF0E ; $FF0E: TED Sound Voice #1 L
    11. TEDSND2 = $FF0F ; $FF0F: TED Sound Voice #2 L
    12. TEDSND1H = $FF10 ; $FF10: TED Sound Voice #1 H
    13. TEDSND = $FF11 ; $FF11: TED Sound Volume,on/off,Wave,D/A
    14. TEDREG = $FF12 ; $FF12: TED Register
    15. TEDREGA = $FF13 ; $FF13: TED Register
    16. TEDVRAM = $FF14 ; $FF14: TED Video-RAM
    17. TEDBACK = $FF15 ; $FF15: Background-Color
    18. TEDCOL1 = $FF16 ; $FF16: TED Color 1
    19. TEDCOL2 = $FF17 ; $FF17: TED Color 2
    20. TEDCOL3 = $FF18 ; $FF18: TED Color 3
    21. TEDFRAME = $FF19 ; $FF19: TED FRAME
    22. TEDCHARH = $FF1A ; $FF1A: TED Char Position H
    23. TEDRASTH = $FF1C ; $FF1C: TED Rasterline H
    24. TEDRASTL = $FF1D ; $FF1D: TED Rasterline L
    25. TEDRASTC = $FF1E ; $FF1E: TED Rastercolumn
    26. TEDRASTV = $FF1F ; $FF1F: TED Raster vertical
    27. TEDROM = $FF3E ; $FF3E: TED ROM ON
    28. TEDRAM = $FF3F
    29. *= $2000
    30. ;--------------------------------------------------
    31. ; Commodore 16 - TED Rastersplit
    32. ;--------------------------------------------------
    33. screen=$0c00
    34. sei
    35. lda #$70
    36. sta $a0
    37. lda #$93
    38. jsr $ffd2
    39. ldx #$00
    40. - lda text,x
    41. sta $0c00+160,x
    42. lda text1,x
    43. sta $0c00+800,x
    44. inx
    45. cpx #$28
    46. bne -
    47. lda #<rasterirq
    48. sta $0314
    49. lda #>rasterirq
    50. sta $0315
    51. cli
    52. jmp*
    53. rasterirq: lda $a0
    54. cmp #$01
    55. beq +
    56. dec $a0
    57. + lda TEDREG
    58. and #$fb
    59. sta TEDREG
    60. lda TEDREGA ; ram charset $1000
    61. and #$03
    62. ora #$18
    63. sta TEDREGA
    64. lda #$f1
    65. lda TEDGraph2
    66. ora #$90
    67. sta TEDGraph2
    68. sta TEDBACK
    69. sta TEDFRAME
    70. - ldx TEDRASTL ; splitline
    71. cpx #$70
    72. bne -
    73. nop
    74. nop
    75. nop
    76. nop
    77. nop
    78. nop
    79. nop
    80. nop
    81. nop
    82. nop
    83. nop
    84. nop
    85. nop
    86. nop
    87. nop
    88. lda #$c4
    89. sta TEDREG
    90. lda #$d0 ; rom charset $d000
    91. sta TEDREGA
    92. lda TEDGraph2
    93. and #$00
    94. ora #$08
    95. sta TEDGraph2
    96. lda #$94
    97. sta TEDBACK
    98. sta TEDFRAME
    99. - ldx TEDRASTL
    100. cpx #$ff ; endline
    101. bne -
    102. endirq: jmp $fcc3
    103. text: !scr " W scramble ram charset just ripped W "
    104. text1: !scr " rom charset at $d000 for second part "
    105. *=$1000
    106. !bin "scramblezs",,2
    Alles anzeigen
    Sieht dann so aus:



    Mike schrieb:

    Gerrit, es gibt auch beim VIC-II am C64 ein 9. Bit für die Rasterzeile, es ist in $D011 gespeichert. Das hat mit der Problematik hier überhaupt nichts zu tun.

    HOLY MOSES, dir wurde ja jetzt von cbmhardware eine Lösung auf dem Silbertablett präsentiert.


    Ja, ich weiß, daß erste, lebendige Beispiel das helfen könnte es zu verstehen.


    HOLY MOSES/ROLE schrieb:

    Es geht eigentlich nur darum, die Funktion von $d012 (C64) auf dem Plus4 zu übertragen.
    Da brauchst Du nichts weiter zu tun, der TED gibt das schon her. Es gibt nur halt noch einen weiteren Nutzer ...


    Nun, ich muss zugeben, daß hilft mir nicht wirklich weiter. Wenn Du nicht wirklich praktisch helfen willst, ist das für mich völlig okay. Ich nehme die Ignorierung somit dankend an.
    Gruß & Kuss zum Wochenschluss,
    Holy Moses/Role

    m.youtube.com/watch?v=iMtYBzMCYhQ

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von HOLY MOSES/ROLE ()