head_em.s 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. .define hol0, argv, envp, begbss
  2. .define .ignmask,.reghp,.trapproc,.fra
  3. .define .retadr,.retadr1,.areg,.bcreg,.tmp1
  4. .define block1, block2, block3
  5. .define .stop
  6. .sect .text
  7. .sect .rom
  8. .sect .data
  9. .sect .bss
  10. .sect .text
  11. .sect .text
  12. lxi h,0x1000 ! stack will grow from 0x1000 downwards
  13. sphl
  14. lxi d,endbss
  15. lxi h,begbss ! clear bss
  16. mov a,e
  17. sub l
  18. mov e,a
  19. mov a,d
  20. sbb h
  21. mov d,a ! de now contains endbss - begbss
  22. mvi c,0
  23. 2: mov m,c
  24. inx h
  25. dcx d
  26. mov a,e
  27. ora d
  28. jnz 2b
  29. lxi h,envp ! call main
  30. push h
  31. lxi h,argv
  32. push h
  33. lxi h,0
  34. push h
  35. call __m_a_i_n
  36. .stop: jmp 0xfb52
  37. .sect .bss
  38. begbss:
  39. .trapproc: .space 2
  40. .ignmask: .space 2
  41. .sect .data
  42. hol0: .space 8
  43. .reghp: .data2 endbss
  44. argv: .data2 0
  45. envp: .data2 0
  46. .retadr: .space 2 ! used to save return address
  47. .retadr1: .space 2 ! reserve
  48. .bcreg: .space 2 ! used to save localbase
  49. .areg: .space 1
  50. .tmp1: .space 2
  51. .fra: .space 8 ! 8 bytes function return area
  52. block1: .space 4 ! used by 32 bits divide and
  53. block2: .space 4 ! multiply routines
  54. block3: .space 4