@nataliapc/mcp-openmsx 1.1.15 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +84 -37
  2. package/dist/server.js +101 -40
  3. package/dist/utils.js +42 -2
  4. package/dist/vectordb.js +61 -0
  5. package/package.json +8 -3
  6. package/resources/audio/msx-midi.md +872 -0
  7. package/resources/audio/psg_registers.md +281 -0
  8. package/resources/audio/sound_cartridge_scc.md +123 -0
  9. package/resources/audio/sound_cartridge_scci.md +250 -0
  10. package/resources/audio/toc.json +8 -4
  11. package/resources/book--msx2-technical-handbook/toc.json +1 -1
  12. package/resources/msx-dos/MSX-DOS_2_Environment_Variables.md +1368 -0
  13. package/resources/msx-dos/MSX-DOS_File_extensions.md +154 -0
  14. package/resources/msx-dos/toc.json +13 -0
  15. package/resources/msx-unapi/toc.json +2 -2
  16. package/resources/others/keyboard_matrices.md +243 -0
  17. package/resources/others/toc.json +6 -0
  18. package/resources/programming/asm_callbios.md +79 -0
  19. package/resources/programming/asm_docopy.md +115 -0
  20. package/resources/programming/asm_fast_loops.md +200 -0
  21. package/resources/programming/asm_getslot.md +143 -0
  22. package/resources/programming/asm_interrupts.md +202 -0
  23. package/resources/programming/asm_load_screen.md +240 -0
  24. package/resources/programming/asm_mult_div_shifts.md +487 -0
  25. package/resources/programming/asm_raminpage1.md +56 -0
  26. package/resources/programming/asm_vdp_detection.md +78 -0
  27. package/resources/programming/asm_vdp_routines.md +343 -0
  28. package/resources/programming/asm_z80_routines_collection.md +810 -0
  29. package/resources/programming/basic_wiki/ABS().md +36 -0
  30. package/resources/programming/basic_wiki/AND.md +71 -0
  31. package/resources/programming/basic_wiki/ASC().md +38 -0
  32. package/resources/programming/basic_wiki/ATN().md +36 -0
  33. package/resources/programming/basic_wiki/AUTO.md +39 -0
  34. package/resources/programming/basic_wiki/BASE().md +147 -0
  35. package/resources/programming/basic_wiki/BEEP.md +27 -0
  36. package/resources/programming/basic_wiki/BIN$().md +36 -0
  37. package/resources/programming/basic_wiki/BLOAD.md +63 -0
  38. package/resources/programming/basic_wiki/BSAVE.md +61 -0
  39. package/resources/programming/basic_wiki/CALL.md +391 -0
  40. package/resources/programming/basic_wiki/CALL_ADJUST.md +40 -0
  41. package/resources/programming/basic_wiki/CALL_IMPOSE.md +28 -0
  42. package/resources/programming/basic_wiki/CALL_OPTIONS.md +26 -0
  43. package/resources/programming/basic_wiki/CALL_PAUSE.md +119 -0
  44. package/resources/programming/basic_wiki/CALL_PCMPLAY.md +60 -0
  45. package/resources/programming/basic_wiki/CALL_PCMREC.md +70 -0
  46. package/resources/programming/basic_wiki/CDBL().md +36 -0
  47. package/resources/programming/basic_wiki/CHR$().md +51 -0
  48. package/resources/programming/basic_wiki/CINT().md +36 -0
  49. package/resources/programming/basic_wiki/CIRCLE.md +51 -0
  50. package/resources/programming/basic_wiki/CLEAR.md +39 -0
  51. package/resources/programming/basic_wiki/CLOAD.md +27 -0
  52. package/resources/programming/basic_wiki/CLOAD?.md +31 -0
  53. package/resources/programming/basic_wiki/CLOSE.md +44 -0
  54. package/resources/programming/basic_wiki/CLS.md +51 -0
  55. package/resources/programming/basic_wiki/COLOR.md +143 -0
  56. package/resources/programming/basic_wiki/COLOR=.md +93 -0
  57. package/resources/programming/basic_wiki/COLOR_SPRITE$().md +83 -0
  58. package/resources/programming/basic_wiki/COLOR_SPRITE().md +85 -0
  59. package/resources/programming/basic_wiki/CONT.md +23 -0
  60. package/resources/programming/basic_wiki/COPY.md +215 -0
  61. package/resources/programming/basic_wiki/COPY_SCREEN.md +61 -0
  62. package/resources/programming/basic_wiki/COS().md +37 -0
  63. package/resources/programming/basic_wiki/CSAVE.md +35 -0
  64. package/resources/programming/basic_wiki/CSNG().md +36 -0
  65. package/resources/programming/basic_wiki/CSRLIN.md +33 -0
  66. package/resources/programming/basic_wiki/DATA.md +47 -0
  67. package/resources/programming/basic_wiki/DEFDBL.md +40 -0
  68. package/resources/programming/basic_wiki/DEFINT.md +40 -0
  69. package/resources/programming/basic_wiki/DEFSNG.md +40 -0
  70. package/resources/programming/basic_wiki/DEFSTR.md +40 -0
  71. package/resources/programming/basic_wiki/DEF_FN.md +49 -0
  72. package/resources/programming/basic_wiki/DEF_USR.md +33 -0
  73. package/resources/programming/basic_wiki/DELETE.md +49 -0
  74. package/resources/programming/basic_wiki/DIM.md +59 -0
  75. package/resources/programming/basic_wiki/DRAW.md +77 -0
  76. package/resources/programming/basic_wiki/ELSE.md +45 -0
  77. package/resources/programming/basic_wiki/END.md +32 -0
  78. package/resources/programming/basic_wiki/EOF().md +36 -0
  79. package/resources/programming/basic_wiki/EQV.md +76 -0
  80. package/resources/programming/basic_wiki/ERASE.md +35 -0
  81. package/resources/programming/basic_wiki/ERL.md +34 -0
  82. package/resources/programming/basic_wiki/ERR.md +143 -0
  83. package/resources/programming/basic_wiki/ERROR.md +145 -0
  84. package/resources/programming/basic_wiki/EXP().md +38 -0
  85. package/resources/programming/basic_wiki/FIELD.md +48 -0
  86. package/resources/programming/basic_wiki/FIX().md +44 -0
  87. package/resources/programming/basic_wiki/FN.md +61 -0
  88. package/resources/programming/basic_wiki/FOR...NEXT.md +80 -0
  89. package/resources/programming/basic_wiki/FRE().md +66 -0
  90. package/resources/programming/basic_wiki/GET_DATE.md +60 -0
  91. package/resources/programming/basic_wiki/GET_TIME.md +34 -0
  92. package/resources/programming/basic_wiki/GOSUB.md +41 -0
  93. package/resources/programming/basic_wiki/GOTO.md +41 -0
  94. package/resources/programming/basic_wiki/HEX$().md +36 -0
  95. package/resources/programming/basic_wiki/IF...GOTO...ELSE.md +55 -0
  96. package/resources/programming/basic_wiki/IF...THEN...ELSE.md +50 -0
  97. package/resources/programming/basic_wiki/IMP.md +83 -0
  98. package/resources/programming/basic_wiki/INKEY$.md +65 -0
  99. package/resources/programming/basic_wiki/INP().md +33 -0
  100. package/resources/programming/basic_wiki/INPUT$().md +51 -0
  101. package/resources/programming/basic_wiki/INPUT.md +93 -0
  102. package/resources/programming/basic_wiki/INSTR().md +44 -0
  103. package/resources/programming/basic_wiki/INT().md +44 -0
  104. package/resources/programming/basic_wiki/INTERVAL.md +57 -0
  105. package/resources/programming/basic_wiki/KEY().md +51 -0
  106. package/resources/programming/basic_wiki/KEY.md +254 -0
  107. package/resources/programming/basic_wiki/LEFT$().md +39 -0
  108. package/resources/programming/basic_wiki/LEN().md +36 -0
  109. package/resources/programming/basic_wiki/LET.md +68 -0
  110. package/resources/programming/basic_wiki/LINE.md +74 -0
  111. package/resources/programming/basic_wiki/LINE_INPUT.md +79 -0
  112. package/resources/programming/basic_wiki/LIST.md +58 -0
  113. package/resources/programming/basic_wiki/LLIST.md +43 -0
  114. package/resources/programming/basic_wiki/LOAD.md +56 -0
  115. package/resources/programming/basic_wiki/LOCATE.md +67 -0
  116. package/resources/programming/basic_wiki/LOG().md +36 -0
  117. package/resources/programming/basic_wiki/LPOS().md +31 -0
  118. package/resources/programming/basic_wiki/LPRINT.md +46 -0
  119. package/resources/programming/basic_wiki/MAXFILES.md +39 -0
  120. package/resources/programming/basic_wiki/MERGE.md +54 -0
  121. package/resources/programming/basic_wiki/MID$().md +72 -0
  122. package/resources/programming/basic_wiki/MOD.md +39 -0
  123. package/resources/programming/basic_wiki/MOTOR.md +46 -0
  124. package/resources/programming/basic_wiki/NEW.md +27 -0
  125. package/resources/programming/basic_wiki/NOT.md +61 -0
  126. package/resources/programming/basic_wiki/OCT$().md +36 -0
  127. package/resources/programming/basic_wiki/ON...GOSUB.md +45 -0
  128. package/resources/programming/basic_wiki/ON...GOTO.md +42 -0
  129. package/resources/programming/basic_wiki/ON_ERROR_GOTO.md +61 -0
  130. package/resources/programming/basic_wiki/ON_INTERVAL_GOSUB.md +54 -0
  131. package/resources/programming/basic_wiki/ON_KEY_GOSUB.md +56 -0
  132. package/resources/programming/basic_wiki/ON_SPRITE_GOSUB.md +41 -0
  133. package/resources/programming/basic_wiki/ON_STOP_GOSUB.md +56 -0
  134. package/resources/programming/basic_wiki/ON_STRIG_GOSUB.md +70 -0
  135. package/resources/programming/basic_wiki/OPEN.md +103 -0
  136. package/resources/programming/basic_wiki/OR.md +75 -0
  137. package/resources/programming/basic_wiki/OUT.md +35 -0
  138. package/resources/programming/basic_wiki/PAD().md +110 -0
  139. package/resources/programming/basic_wiki/PAINT.md +66 -0
  140. package/resources/programming/basic_wiki/PDL().md +53 -0
  141. package/resources/programming/basic_wiki/PEEK().md +44 -0
  142. package/resources/programming/basic_wiki/PLAY().md +58 -0
  143. package/resources/programming/basic_wiki/PLAY.md +196 -0
  144. package/resources/programming/basic_wiki/POINT.md +52 -0
  145. package/resources/programming/basic_wiki/POKE.md +51 -0
  146. package/resources/programming/basic_wiki/POS().md +36 -0
  147. package/resources/programming/basic_wiki/PRESET.md +61 -0
  148. package/resources/programming/basic_wiki/PRINT.md +179 -0
  149. package/resources/programming/basic_wiki/PSET.md +82 -0
  150. package/resources/programming/basic_wiki/PUT_KANJI.md +93 -0
  151. package/resources/programming/basic_wiki/PUT_SPRITE.md +143 -0
  152. package/resources/programming/basic_wiki/READ.md +45 -0
  153. package/resources/programming/basic_wiki/REM.md +42 -0
  154. package/resources/programming/basic_wiki/RENUM.md +78 -0
  155. package/resources/programming/basic_wiki/RESTORE.md +52 -0
  156. package/resources/programming/basic_wiki/RESUME.md +45 -0
  157. package/resources/programming/basic_wiki/RETURN.md +47 -0
  158. package/resources/programming/basic_wiki/RIGHT$().md +39 -0
  159. package/resources/programming/basic_wiki/RND().md +51 -0
  160. package/resources/programming/basic_wiki/RUN.md +56 -0
  161. package/resources/programming/basic_wiki/SAVE.md +65 -0
  162. package/resources/programming/basic_wiki/SCREEN.md +164 -0
  163. package/resources/programming/basic_wiki/SET_ADJUST.md +66 -0
  164. package/resources/programming/basic_wiki/SET_BEEP.md +76 -0
  165. package/resources/programming/basic_wiki/SET_DATE.md +103 -0
  166. package/resources/programming/basic_wiki/SET_PAGE.md +52 -0
  167. package/resources/programming/basic_wiki/SET_PASSWORD.md +75 -0
  168. package/resources/programming/basic_wiki/SET_PROMPT.md +61 -0
  169. package/resources/programming/basic_wiki/SET_SCREEN.md +100 -0
  170. package/resources/programming/basic_wiki/SET_SCROLL.md +55 -0
  171. package/resources/programming/basic_wiki/SET_TIME.md +83 -0
  172. package/resources/programming/basic_wiki/SET_TITLE.md +87 -0
  173. package/resources/programming/basic_wiki/SET_VIDEO.md +49 -0
  174. package/resources/programming/basic_wiki/SGN().md +38 -0
  175. package/resources/programming/basic_wiki/SIN().md +36 -0
  176. package/resources/programming/basic_wiki/SOUND.md +188 -0
  177. package/resources/programming/basic_wiki/SPACE$().md +38 -0
  178. package/resources/programming/basic_wiki/SPC().md +34 -0
  179. package/resources/programming/basic_wiki/SPRITE$().md +50 -0
  180. package/resources/programming/basic_wiki/SPRITE.md +31 -0
  181. package/resources/programming/basic_wiki/SQR().md +32 -0
  182. package/resources/programming/basic_wiki/STICK().md +70 -0
  183. package/resources/programming/basic_wiki/STOP.md +70 -0
  184. package/resources/programming/basic_wiki/STR$().md +37 -0
  185. package/resources/programming/basic_wiki/STRIG().md +82 -0
  186. package/resources/programming/basic_wiki/STRING$().md +42 -0
  187. package/resources/programming/basic_wiki/SWAP.md +62 -0
  188. package/resources/programming/basic_wiki/TAB().md +38 -0
  189. package/resources/programming/basic_wiki/TAN().md +36 -0
  190. package/resources/programming/basic_wiki/TIME.md +59 -0
  191. package/resources/programming/basic_wiki/TROFF.md +21 -0
  192. package/resources/programming/basic_wiki/TRON.md +39 -0
  193. package/resources/programming/basic_wiki/USR().md +66 -0
  194. package/resources/programming/basic_wiki/VAL().md +36 -0
  195. package/resources/programming/basic_wiki/VARPTR().md +50 -0
  196. package/resources/programming/basic_wiki/VDP().md +103 -0
  197. package/resources/programming/basic_wiki/VPEEK().md +46 -0
  198. package/resources/programming/basic_wiki/VPOKE.md +48 -0
  199. package/resources/programming/basic_wiki/WAIT.md +38 -0
  200. package/resources/programming/basic_wiki/WIDTH.md +76 -0
  201. package/resources/programming/basic_wiki/XOR.md +72 -0
  202. package/resources/programming/basic_wiki/_toc.json +871 -0
  203. package/resources/programming/dos_error_handling.md +85 -0
  204. package/resources/programming/toc.json +51 -36
  205. package/resources/programming/vdp_commands_speed.md +147 -0
  206. package/resources/programming/vdp_programming_faq.md +55 -0
  207. package/resources/programming/vdp_programming_tutorial.md +390 -0
  208. package/resources/programming/vdp_screensplit_programming_guide.md +166 -0
  209. package/resources/programming/vdp_scrolling_on_msx.md +124 -0
  210. package/resources/programming/vdp_the_yjk_screen_modes.md +227 -0
  211. package/resources/programming/vdp_v9938_vram_timings.md +539 -0
  212. package/resources/programming/vdp_v9938_vram_timings_part_2.md +281 -0
  213. package/resources/sdcc/toc.json +1 -1
  214. package/vector-db/index.json +1 -0
  215. /package/resources/msx-unapi/{Ethernet_UNAPI_specification_1.1.md → Ethernet_UNAPI_specification_1_1.md} +0 -0
  216. /package/resources/msx-unapi/{MSX_UNAPI_specification_1.1.md → MSX_UNAPI_specification_1_1.md} +0 -0
@@ -0,0 +1,343 @@
1
+ # A whole shitload of VDP routines
2
+
3
+ These routines are just provided as-is, since I don’t really feel like explaining them all. Most of them are either:
4
+ - a. already explained somewhere else
5
+ - b. obvious
6
+ - c. may give you a little challenge to try and understand them.
7
+
8
+ They are designed for use from a DOS environment, but most of them can also be used from Basic...
9
+
10
+ ```assembly
11
+ ;
12
+ ;==============================================================================
13
+ ;= VDP-Routines ===============================================================
14
+ ;==============================================================================
15
+ ;
16
+ ;Definitions...
17
+ ;
18
+ CallSlot: equ #1c
19
+ EXP_TABLE: equ #fcc1
20
+ INITXT: equ #6C
21
+
22
+ ;
23
+ VDP_SetReg: MACRO @register ;Set value A in the specified register
24
+ out (#99),a
25
+ ld a,@register+128
26
+ out (#99),a
27
+ ENDM
28
+ ```
29
+
30
+ ```assembly
31
+ ;
32
+ ; Fast DoCopy, by Grauw
33
+ ; Out: BC = 0, HL = updated
34
+ ;
35
+ DoCopy: ld a,32
36
+ di
37
+ out (#99),a
38
+ ld a,17+128
39
+ out (#99),a
40
+ ld c,#9B
41
+ VDPready: ld a,2
42
+ di
43
+ out (#99),a ;select s#2
44
+ ld a,15+128
45
+ out (#99),a
46
+ in a,(#99)
47
+ rra
48
+ ld a,0
49
+ out (#99),a
50
+ ld a,15+128
51
+ ei
52
+ out (#99),a
53
+ jp c,VDPready
54
+ DW #A3ED,#A3ED,#A3ED,#A3ED ;15x OUTI
55
+ DW #A3ED,#A3ED,#A3ED,#A3ED ; (faster than OTIR)
56
+ DW #A3ED,#A3ED,#A3ED,#A3ED
57
+ DW #A3ED,#A3ED,#A3ED
58
+ ret
59
+ ```
60
+
61
+ ```assembly
62
+ ;
63
+ ; This lil' routine waits until the VDP is done copying.
64
+ ;
65
+ VDP_Ready: ld a,2
66
+ di
67
+ out (#99),a ;select s#2
68
+ ld a,15+128
69
+ out (#99),a
70
+ in a,(#99)
71
+ rra
72
+ ld a,0 ;select s#0
73
+ out (#99),a
74
+ ld a,15+128
75
+ ei
76
+ out (#99),a
77
+ jp c,VDPready
78
+ ret
79
+ ```
80
+
81
+ ```assembly
82
+ ;
83
+ ; Copy the VDP-registers' settings to array VDP.
84
+ ; Afterwards, read the VDP-registers with LD A,(VDP + r)
85
+ ; (this should be placed at the start of a program)
86
+ ;
87
+ Copy_VdpRegs: ld hl,VDP_0
88
+ ld de,VDP
89
+ ld bc,8
90
+ ldir
91
+ ld hl,VDP_8
92
+ ld de,VDP+8
93
+ ld bc,17
94
+ ldir
95
+ ret
96
+ ```
97
+
98
+ ```assembly
99
+ ;
100
+ ; Restore the VDP-registers' settings.
101
+ ; (this should be placed at the end of a program)
102
+ ;
103
+ Rest_VdpRegs: ld bc,#0800
104
+ ld hl,VDP_0
105
+ call Rest_VdpSub
106
+ ld bc,#1008
107
+ ld hl,VDP_8
108
+ call Rest_VdpSub
109
+ ld bc,#0319
110
+ ld hl,TRIPLE_ZERO ;a jp Restore_Vdp_Sub is implied
111
+ Rest_VdpSub: ld a,(hl)
112
+ inc hl
113
+ di
114
+ out (#99),a
115
+ ld a,c
116
+ or 128
117
+ ei
118
+ out (#99),a
119
+ inc c
120
+ djnz Rest_VdpSub
121
+ ret
122
+
123
+ ;
124
+ TRIPLE_ZERO: DB 0,0,0
125
+ ```
126
+
127
+ ```assembly
128
+ ;
129
+ ; Selecteer screen 5...
130
+ ;
131
+ Screen5: ld a,(VDP) ;Select screen 5 (0)
132
+ and %11110001
133
+ or %00000110
134
+ ld (VDP),a
135
+ di
136
+ VDP_SetReg 0
137
+ ld a,(VDP+1) ;select screen 5 + Sprite size 16/16 (1)
138
+ and %11100100
139
+ or %00000010
140
+ ld (VDP+1),a
141
+ VDP_SetReg 1
142
+ xor a ;black achtergrond (7)
143
+ ld (VDP+7),a
144
+ VDP_SetReg 7
145
+ ld a,(VDP+8) ;sprites on & color 0 not transparent (8)
146
+ and %11011101
147
+ or 2 ;sprites off (faster!)
148
+ ld (VDP+8),a
149
+ VDP_SetReg 8
150
+ ld a,(VDP+9)
151
+ set 7,a ;192 lines
152
+ res 1,a ;60 Hz
153
+ ld (VDP+9),a
154
+ VDP_SetReg 9
155
+ ei
156
+ ret
157
+
158
+ ;
159
+ Screen0: ld iy,(EXP_TABLE-1)
160
+ ld ix,INITXT ;BIOS-call from DOS
161
+ jp CallSlot
162
+ ```
163
+
164
+ ```assembly
165
+ ;
166
+ ; Check if a v9958 is available (if so, return nz)
167
+ ; Initialize address (v9958)
168
+ ;
169
+ v9958_Check: di ;Test for v9958
170
+ ld a,1 ;Set s#1
171
+ VDP_SetReg 15
172
+ ld a,(de) ;Waste some time...
173
+ in a,(#99)
174
+ push af
175
+ ld a,0
176
+ VDP_SetReg 15 ;Set s#0
177
+ ei
178
+ pop af
179
+ and %00111100 ;v9938? RET with Z
180
+ ld (v9958),a
181
+ ret
182
+ ```
183
+
184
+ ```assembly
185
+ ;
186
+ ; Enable the sprites.
187
+ ;
188
+ Sprites_On: ld a,(VDP+8)
189
+ and %11111101
190
+ ld (VDP+8),a
191
+ di
192
+ out (#99),a
193
+ ld a,8+128
194
+ ei
195
+ out (#99),a
196
+ ret
197
+ ```
198
+
199
+ ```assembly
200
+ ;
201
+ ; Disable the sprites.
202
+ ;
203
+ Sprites_Off: ld a,(VDP+8)
204
+ or %00000010
205
+ ld (VDP+8),a
206
+ di
207
+ out (#99),a
208
+ ld a,8+128
209
+ ei
210
+ out (#99),a
211
+ ret
212
+ ```
213
+
214
+ ```assembly
215
+ ;
216
+ ; Disable the screen.
217
+ ;
218
+ Disable_Scr: ld a,(VDP+1)
219
+ and %10111111
220
+ ld (VDP+1),a
221
+ di
222
+ out (#99),a
223
+ ld a,1+128
224
+ ei
225
+ out (#99),a
226
+ ret
227
+ ```
228
+
229
+ ```assembly
230
+ ;
231
+ ; Enable the screen.
232
+ ;
233
+ Enable_Scr: ld a,(VDP+1)
234
+ or %01000000
235
+ ld (VDP+1),a
236
+ di
237
+ out (#99),a
238
+ ld a,1+128
239
+ ei
240
+ out (#99),a
241
+ ret
242
+ ```
243
+
244
+ ```assembly
245
+ ;
246
+ ; Set page A (in screen 5).
247
+ ;
248
+ SetPage: add a,a ;x32
249
+ add a,a
250
+ add a,a
251
+ add a,a
252
+ add a,a
253
+ add a,31
254
+ ld (VDP+2),a
255
+ di
256
+ out (#99),a
257
+ ld a,2+128
258
+ ei
259
+ out (#99),a
260
+ ret
261
+ ```
262
+
263
+ ```assembly
264
+ ;
265
+ ; Set VDP port #98 to start writing at address AHL (17-bit)
266
+ ;
267
+ SetVdp_Write: rlc h
268
+ rla
269
+ rlc h
270
+ rla
271
+ srl h
272
+ srl h
273
+ di
274
+ out (#99),a ;set bits 15-17
275
+ ld a,14+128
276
+ out (#99),a
277
+ ld a,l ;set bits 0-7
278
+ nop
279
+ out (#99),a
280
+ ld a,h ;set bits 8-14
281
+ or 64 ; + write access
282
+ ei
283
+ out (#99),a
284
+ ret
285
+ ```
286
+
287
+ ```assembly
288
+ ;
289
+ ; Set VDP port #98 to start reading at address AHL (17-bit)
290
+ ;
291
+ SetVdp_Read: rlc h
292
+ rla
293
+ rlc h
294
+ rla
295
+ srl h
296
+ srl h
297
+ di
298
+ out (#99),a ;set bits 15-17
299
+ ld a,14+128
300
+ out (#99),a
301
+ ld a,l ;set bits 0-7
302
+ nop
303
+ out (#99),a
304
+ ld a,h ;set bits 8-14
305
+ ei ; + read access
306
+ out (#99),a
307
+ ret
308
+ ```
309
+
310
+ ```assembly
311
+ ;
312
+ ; Set the VDP's palette to the palette HL points to
313
+ ; Changes: AF, BC, HL (=updated)
314
+ ;
315
+ SetPalet: xor a ;Set p#pointer to zero.
316
+ di
317
+ out (#99),a
318
+ ld a,16+128
319
+ ei
320
+ out (#99),a
321
+ ld c,#9A
322
+ DW #A3ED,#A3ED,#A3ED,#A3ED ;32x OUTI instruction
323
+ DW #A3ED,#A3ED,#A3ED,#A3ED ; (faster than OTIR)
324
+ DW #A3ED,#A3ED,#A3ED,#A3ED
325
+ DW #A3ED,#A3ED,#A3ED,#A3ED
326
+ DW #A3ED,#A3ED,#A3ED,#A3ED
327
+ DW #A3ED,#A3ED,#A3ED,#A3ED
328
+ DW #A3ED,#A3ED,#A3ED,#A3ED
329
+ DW #A3ED,#A3ED,#A3ED,#A3ED
330
+ ret
331
+ ```
332
+
333
+ ```assembly
334
+ ;
335
+ ; Data
336
+ ;
337
+ VDP: DS 28,0
338
+ v9958: DB 0 ;>1 = v9958 present
339
+ ```
340
+
341
+ ## Source
342
+
343
+ https://map.grauw.nl/sources/vdp_rout.php