head.s 893 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. .base 0x1000
  7. .text
  8. lxi h,0x1000 ! stack will grow from 0x1000 downwards
  9. sphl
  10. lxi h,begbss ! clear bss
  11. lxi d,endbss-begbss
  12. mvi c,0
  13. 2: mov m,c
  14. inx h
  15. dcx d
  16. mov a,e
  17. ora d
  18. jnz 2b
  19. lxi h,envp ! call main
  20. push h
  21. lxi h,argv
  22. push h
  23. lxi h,0
  24. push h
  25. call _m_a_i_n
  26. .stop: jmp 0xfb52
  27. .bss
  28. begbss:
  29. .trapproc: .space 2
  30. .ignmask: .space 2
  31. .data
  32. hol0: .space 8
  33. .reghp: .word endbss
  34. argv: .word 0
  35. envp: .word 0
  36. .retadr: .space 2 ! used to save return address
  37. .retadr1: .space 2 ! reserve
  38. .bcreg: .space 2 ! used to save localbase
  39. .areg: .space 1
  40. .tmp1: .space 2
  41. .fra: .space 8 ! 8 bytes function return area
  42. block1: .space 4 ! used by 32 bits divide and
  43. block2: .space 4 ! multiply routines
  44. block3: .space 4