25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

249 satır
5.5KB

  1. ; E04-S01: PRG/MAP writer test in x128.
  2. ;
  3. ; The fixture runs in the compiler mapping and writes GENERATE.PRG/MAP with
  4. ; the fixed startup, a PAD section at $1C80, then checks:
  5. ; +0 out_finish result (0)
  6. ; +1 collision result (OUT_ERR_EXISTS)
  7. ; +2 section-order result (OUT_ERR_ORDER)
  8. ; +3 abort result (0)
  9. ; COLLIDE.PRG/MAP already exist on the test disk; the host verifies they are
  10. ; unchanged. ABORT and ORDER must leave no output behind.
  11. .setcpu "6502"
  12. .include "../../src/common/c128.inc"
  13. .include "../../src/common/mailbox.inc"
  14. .include "../../src/common/formats.inc"
  15. .import mmu_init, mmu_bank0, mmu_shutdown
  16. .import out_begin, out_startup, out_section, out_end_section
  17. .import out_byte, out_bytes, out_finish, out_abort
  18. .import out_load, out_entry, out_start, out_err
  19. .segment "LOADADDR"
  20. .word $1C01
  21. .segment "EXEHDR"
  22. .word basic_end
  23. .word 10
  24. .byte $9E
  25. .byte "7181"
  26. .byte $00
  27. basic_end:
  28. .word $0000
  29. .segment "MAILBOX"
  30. .res MB_SIZE
  31. .segment "STARTUP"
  32. .export test_entry
  33. test_entry:
  34. php
  35. sei
  36. ldx #MB_SIZE - 1
  37. lda #$00
  38. @clr: sta MB_BASE,x
  39. dex
  40. bpl @clr
  41. lda #MB_MAGIC0_VALUE
  42. sta MB_MAGIC0
  43. lda #MB_MAGIC1_VALUE
  44. sta MB_MAGIC1
  45. lda #MB_PROD_PLATFORM
  46. sta MB_PRODUCER
  47. lda #MB_ST_RUNNING
  48. sta MB_STATUS
  49. lda #$00
  50. sta fail_mask
  51. sta MB_DATA+0
  52. sta MB_DATA+1
  53. sta MB_DATA+2
  54. sta MB_DATA+3
  55. jsr mmu_init
  56. jsr mmu_bank0
  57. lda #<PRG_LOAD_ADDR
  58. sta out_load
  59. lda #>PRG_LOAD_ADDR
  60. sta out_load+1
  61. lda #<PRG_ENTRY_ADDR
  62. sta out_entry
  63. lda #>PRG_ENTRY_ADDR
  64. sta out_entry+1
  65. ; ------------------------------------------------ successful output
  66. lda #<name_generate
  67. ldx #>name_generate
  68. ldy #name_generate_len
  69. jsr out_begin
  70. bcs @gen_fail
  71. jsr out_startup
  72. bcs @gen_fail
  73. lda #$80
  74. sta out_start
  75. lda #$1C
  76. sta out_start+1
  77. lda #<name_pad
  78. ldx #>name_pad
  79. ldy #3
  80. jsr out_section
  81. bcs @gen_fail
  82. lda #<pad_bytes
  83. ldx #>pad_bytes
  84. ldy #4
  85. jsr out_bytes
  86. bcs @gen_fail
  87. jsr out_end_section
  88. jsr out_finish
  89. bcs @gen_fail
  90. lda out_err
  91. sta MB_DATA+0
  92. cmp #OUT_OK
  93. beq @gen_done
  94. lda #$01
  95. jsr fail
  96. jmp @gen_done
  97. @gen_fail:
  98. lda out_err
  99. sta MB_DATA+0
  100. lda #$01
  101. jsr fail
  102. jsr out_abort
  103. @gen_done:
  104. ; ---------------------------------------------------- collision
  105. lda #<name_collide
  106. ldx #>name_collide
  107. ldy #name_collide_len
  108. jsr out_begin
  109. bcc @coll_unexpected
  110. lda out_err
  111. sta MB_DATA+1
  112. cmp #OUT_ERR_EXISTS
  113. beq @coll_ok
  114. lda #$02
  115. jsr fail
  116. jmp @coll_abort
  117. @coll_unexpected:
  118. lda #$02
  119. jsr fail
  120. jmp @coll_abort
  121. @coll_ok:
  122. @coll_abort:
  123. jsr out_abort
  124. @coll_done:
  125. ; ------------------------------------------------ section order
  126. lda #<name_order
  127. ldx #>name_order
  128. ldy #name_order_len
  129. jsr out_begin
  130. bcs @order_begin_fail
  131. lda #$00
  132. sta out_start
  133. lda #$1C
  134. sta out_start+1
  135. lda #<name_bad
  136. ldx #>name_bad
  137. ldy #3
  138. jsr out_section
  139. bcc @order_unexpected
  140. lda out_err
  141. sta MB_DATA+2
  142. cmp #OUT_ERR_ORDER
  143. beq @order_abort
  144. lda #$04
  145. jsr fail
  146. jmp @order_abort
  147. @order_begin_fail:
  148. lda out_err
  149. sta MB_DATA+2
  150. lda #$04
  151. jsr fail
  152. jmp @order_done
  153. @order_unexpected:
  154. lda #$04
  155. jsr fail
  156. jmp @order_abort
  157. @order_abort:
  158. jsr out_abort
  159. @order_done:
  160. ; -------------------------------------------------------- abort
  161. lda #<name_abort
  162. ldx #>name_abort
  163. ldy #name_abort_len
  164. jsr out_begin
  165. bcs @abort_fail
  166. lda #$01
  167. sta out_start
  168. lda #$1C
  169. sta out_start+1
  170. lda #<name_x
  171. ldx #>name_x
  172. ldy #1
  173. jsr out_section
  174. bcs @abort_fail
  175. lda #$AA
  176. jsr out_byte
  177. bcs @abort_fail
  178. jsr out_abort
  179. bcs @abort_fail
  180. lda out_err
  181. sta MB_DATA+3
  182. cmp #OUT_OK
  183. beq @abort_done
  184. @abort_fail:
  185. lda out_err
  186. sta MB_DATA+3
  187. lda #$08
  188. jsr fail
  189. jsr out_abort
  190. @abort_done:
  191. jsr mmu_shutdown
  192. lda fail_mask
  193. sta MB_CODE
  194. lda #$00
  195. sta MB_CODE+1
  196. lda #MB_ST_FAIL
  197. ldx fail_mask
  198. bne @status
  199. lda #MB_ST_PASS
  200. @status:
  201. sta MB_STATUS
  202. ldy #$00
  203. @print: lda message,y
  204. beq @end
  205. sty print_y
  206. jsr CHROUT
  207. ldy print_y
  208. iny
  209. bne @print
  210. @end: rts
  211. .segment "CODE"
  212. fail:
  213. ora fail_mask
  214. sta fail_mask
  215. rts
  216. .segment "RODATA"
  217. name_generate: .byte "GENERATE.N8"
  218. name_generate_len = * - name_generate
  219. name_collide: .byte "COLLIDE.N8"
  220. name_collide_len = * - name_collide
  221. name_order: .byte "ORDER.N8"
  222. name_order_len = * - name_order
  223. name_abort: .byte "ABORT.N8"
  224. name_abort_len = * - name_abort
  225. name_pad: .byte "PAD"
  226. name_bad: .byte "BAD"
  227. name_x: .byte "X"
  228. pad_bytes: .byte $DE, $AD, $BE, $EF
  229. message: .byte "NOVA128 OUTPUT TEST DONE", $0D, $00
  230. .segment "BSS"
  231. fail_mask: .res 1
  232. print_y: .res 1

Powered by TurnKey Linux.