Minerva Assembly

Anything QL Software or Programming Related.
quantumDavey
ROM Dongle
Posts: 7
Joined: Thu Mar 12, 2015 12:02 am
Location: Stockport, Cheshire, UK

Minerva Assembly

Post by quantumDavey »

Hi,

Please Hellp !

Okay, so I have downloaded the minerva 1.98 sources. I can't seem to find any kind of makefile, instructions or build plan for how to actually compile/assemble the source into a binary.

I've noticed that others do seem to be assembling/compiling the source, so what files/instructions have you guys got that I haven't and please can I have them or where can I get them ?

Or did I download the wrong sources (I got them off Laurence Reeves site and Dilwyn's site - just in case they were different.)


Cheers,

Dave
[Edited to change 1.89 to 1.98]
Last edited by quantumDavey on Fri Mar 13, 2015 12:58 pm, edited 1 time in total.


User avatar
dilwyn
Mr QL
Posts: 2761
Joined: Wed Dec 01, 2010 10:39 pm

Re: Minerva Assembly

Post by dilwyn »

And of course if anyone has the details, please send the details to me too so I can make them available with the sources for others who may wish to do the same.


User avatar
tofro
Font of All Knowledge
Posts: 2702
Joined: Sun Feb 13, 2011 10:53 pm
Location: SW Germany

Re: Minerva Assembly

Post by tofro »

I have built a Makefile for the Minerva 1.98 sources some years ago and have it somewhere in svn. It builds Minnie properly without any errors, but as I have never found the time to actually test the resulting ROM image, I have never published it.

Once back home on the weekend, I will try and dig it out. If someone wants the ready-built image for a test, please give me a shout.

Tobias


ʎɐqǝ ɯoɹɟ ǝq oʇ ƃuᴉoƃ ʇou sᴉ pɹɐoqʎǝʞ ʇxǝu ʎɯ 'ɹɐǝp ɥO
Paul
Gold Card
Posts: 257
Joined: Mon May 21, 2012 8:50 am

Re: Minerva Assembly

Post by Paul »

Shout!


Derek_Stewart
Font of All Knowledge
Posts: 3958
Joined: Mon Dec 20, 2010 11:40 am
Location: Sunny Runcorn, Cheshire, UK

Re: Minerva Assembly

Post by Derek_Stewart »

Hi,

I can programme eproms and it would be nice to assemble Minerva.


Regards,

Derek
User avatar
pjw
QL Wafer Drive
Posts: 1300
Joined: Fri Jul 11, 2014 8:44 am
Location: Norway
Contact:

Re: Minerva Assembly

Post by pjw »

I have the Minerva 1.98 sources, obtained from either Dilwyn or Laurence. In the directory M_ROM you should find the link file. I just assembled it now and everything appeared to go well. However, the resultant file is 48822 bytes which differs from other rom files, including one I have here called min198_rom weighing in at 48744. Was expecting 48k exactly. Hmm. I have no way of testing beyond that at the moment.

Per


Per
dont be happy. worry
- ?
User avatar
tofro
Font of All Knowledge
Posts: 2702
Joined: Sun Feb 13, 2011 10:53 pm
Location: SW Germany

Re: Minerva Assembly

Post by tofro »

That's the tricky bit....

The original build process (which seems to be missing from Dilwyn's sources) built libraries. That is, whatever is not referenced from code will not end up in the binary.
The other thing is: You need to get the order of linked modules right, so that stuff (like the vector tables) ends up in the right places.

And no, the resulting binary doesn't actually need to be exactly 48k (as long as it is smaller, obviously). Mine is a few hundred bytes off as well (size: 48821, to be exact. Funny - Why is this odd and one byte off yours?).

Tobias


ʎɐqǝ ɯoɹɟ ǝq oʇ ƃuᴉoƃ ʇou sᴉ pɹɐoqʎǝʞ ʇxǝu ʎɯ 'ɹɐǝp ɥO
User avatar
pjw
QL Wafer Drive
Posts: 1300
Joined: Fri Jul 11, 2014 8:44 am
Location: Norway
Contact:

Re: Minerva Assembly

Post by pjw »

Tobias,

The link file I mentioned only contains library references. I believe it was put together by Lau himself, so it should be pukka. I attach it here, in case it has gone missing elsewhere. However, this presupposes that you have all the other cct files.

Most Qdos roms are exactly 48k. I thought the padding had to do with burning the Eproms, but on reflection I see that it probably has to do with the way they were acquired (ie Sbytes 0 to 48k)

Anyway some emulators, specifically Qemulator, wants its roms to be 48k - 80k; it wont accept my freshly compiled rom, which is just under. So I had to

Code: Select all

adr = ALCHP(48 * 1024)
LBYTES 'win1_M_MINERVA198_ROM', adr
SBYTES 'dos3_Minerva198.rom', adr, 48 * 1024
RECHP adr
and that solved the problem: The Minerva V1.98 rom I just assembled from source seems to run flawlessly - under Qemulator, at least :)

Per

Code: Select all

input win1_m_ss_lib
input win1_m_io_lib
input win1_m_ip_lib
input win1_m_mt_lib
input win1_m_bp_lib
input win1_m_mm_lib
input win1_m_cn_lib
input win1_m_ut_lib
input win1_m_bv_lib
input win1_m_md_lib
input win1_m_nd_lib
input win1_m_ca_lib
input win1_m_ri_lib
input win1_m_od_lib
input win1_m_sd_lib
input win1_m_dd_lib
input win1_m_pa_lib
input win1_m_pf_lib
input win1_m_sb_lib
input win1_m_bf_lib
input win1_m_ib_lib
input win1_m_gw_lib
input win1_m_cs_lib
input win1_m_ii_lib
input win1_m_tb_lib
PS: I had to add the line

Code: Select all

program win1_M_Minerva198_rom
to the head of this link file to make it produce a rom image under Qmake/Qmac/Qlink


Per
dont be happy. worry
- ?
User avatar
tofro
Font of All Knowledge
Posts: 2702
Joined: Sun Feb 13, 2011 10:53 pm
Location: SW Germany

Re: Minerva Assembly

Post by tofro »

tofro wrote: Why is this odd and one byte off yours?).
Just checked: Even the odd length is OK, comes from the font tables at the end of the ROM that have an odd length.

Tobias

See attached my Makefile (works with C68 make).
Tobias

Code: Select all

#
# Toplevel Makefile for Minerva 1.98
#
# Assumptions:
#   DATA_USE points to Device/Directory holding the source directories
#   
# Program filenames, adapt if needed
#
ASM  = win1_assembler_qmac
LK   = win1_assembler_qlink
MK   = win1_c68_make
SH   = win1_c68_sh
TC   = win1_c68_touch
RM   = win1_c68_rm

VERSION = 1.98

#
# Assembler command line options
#
ASMCMD      = -errors ram1_err -nosym -bin -link -filetype 2
LINK_TARGET = MINERVA_${VERSION}

#
# Object files
#
OBJECTS = \
   ut_windw_rel \
   ut_messb_rel \
   ut_link_rel \
   ut_cstr_rel\
   ut_err_rel\
   \
   tb_trn_rel\
   tb_otrn_rel\
   tb_multi_rel\
   tb_msg_rel\
   tb_kbenc_rel\
   tb_kbd_rel\
   tb_itrn_rel\
   tb_f1_rel\
   tb_f0_rel\
   \
   ss_util_rel\
   ss_tlist_rel\
   ss_reshd_rel\
   ss_ramt_rel\
   ss_list_rel\
   ss_job_rel\
   ss_iser_rel\
   ss_int2_rel\
   ss_init_rel\
   ss_ext_rel\
   ss_base_rel\
   \
   sd_wdef_rel\
   sd_setfo_rel\
   sd_setco_rel\
   sd_setat_rel\
   sd_pos_rel\
   sd_fresh_rel\
   sd_fill_rel\
   sd_entry_rel\
   sd_enq_rel\
   sd_curw_rel\
   sd_area_rel\
   \
   sb_unvr_rel\
   sb_start_rel\
   \
   ri_swap_rel\
   ri_nabs_rel\
   ri_mldv_rel\
   ri_add_rel\
   ri_power_rel\
   ri_int_rel\
   ri_trig_rel\
   ri_sqrt_rel\
   ri_misc_rel\
   ri_exec_rel\
   \
   pf_nwlin_rel\
   pf_relst_rel\
   \
   pa_grtab_rel\
   pa_table_rel\
   pa_strip_rel\
   pa_mist_rel\
   pa_kywrd_rel\
   pa_graph_rel\
   pa_code_rel\
   pa_chnlt_rel\
   pa_chnam_rel\
   \
   od_ser_rel\
   od_pipe_rel\
   od_conx_rel\
   od_net_rel\
   \
   nd_phys_rel\
   \
   mt_trap_rel\
   mt_inf_rel\
   mt_cjob_rel\
   mt_jinf_rel\
   mt_free_rel\
   mt_trapv_rel\
   mt_susjb_rel\
   mt_alloc_rel\
   mt_dmode_rel\
   mt_ipcom_rel\
   mt_baud_rel\
   mt_rclck_rel\
   mt_lxint_rel\
   mt_cntry_rel\
   \
   mm_fssb_rel\
   mm_scafr_rel\
   mm_mvjob_rel\
   mm_lnkfr_rel\
   mm_alloc_rel\
   mm_retrn_rel\
   mm_rechp_rel\
   mm_altrn_rel\
   mm_alchp_rel\
   mm_move_rel\
   \
   md_endgp_rel\
   md_formt_rel\
   md_sedes_rel\
   md_serve_rel\
   md_slave_rel\
   md_read_rel\
   md_write_rel\
   \
   ip_int_rel\
   ip_kbrd_rel\
   \
   io_chanx_rel\
   io_fdriv_rel\
   io_fopen_rel\
   io_name_rel\
   io_queue_rel\
   io_sched_rel\
   io_serio_rel\
   io_trap2_rel\
   io_trap3_rel\
   io_trap4_rel\
   \
   ii_clock_rel\
   ii_drive_rel\
   \
   ib_error_rel\
   ib_when_rel\
   ib_golin_rel\
   ib_call_rel\
   ib_npass_rel\
   ib_start_rel\
   ib_gost_rel\
   ib_end_rel\
   ib_let_rel\
   ib_array_rel\
   ib_symbl_rel\
   ib_sel_rel\
   ib_restr_rel\
   ib_name_rel\
   ib_wscan_rel\
   ib_next_rel\
   ib_proc_rel\
   ib_def_rel\
   ib_chinl_rel\
   ib_dim_rel\
   ib_exit_rel\
   ib_for_rel\
   ib_goto_rel\
   ib_if_rel\
   ib_kywrd_rel\
   ib_stop_rel\
   \
   gw_pixel_rel\
   gw_pixad_rel\
   gw_choct_rel\
   gw_pitt_rel\
   gw_trans_rel\
   gw_fig_rel\
   gw_flood_rel\
   gw_scale_rel\
   gw_gcur_rel\
   \
   dd_mdv_rel\
   dd_mdvio_rel\
   dd_mdvop_rel\
   dd_mdvcl_rel\
   dd_mdvsc_rel\
   dd_mdvrn_rel\
   dd_mdvbu_rel\
   \
   cs_char_rel\
   cs_color_rel\
   cs_area_rel\
   \
   cn_ston_rel\
   cn_itos_rel\
   cn_ftod_rel\
   cn_date_rel\
   \
   ca_carg_rel\
   ca_cncat_rel\
   ca_cnvrt_rel\
   ca_opexe_rel\
   ca_eval_rel\
   ca_etos_rel\
   ca_fun_rel\
   ca_garg_rel\
   ca_gtarg_rel\
   ca_indx_rel\
   ca_stind_rel\
   \
   bv_vtype_rel\
   bv_names_rel\
   bv_chstk_rel\
   bv_alvv_rel\
   bv_upnxt_rel\
   \
   bp_windw_rel\
   bp_turtl_rel\
   bp_misc_rel\
   bp_print_rel\
   bp_poke_rel\
   bp_grafx_rel\
   bp_files_rel\
   bp_chan_rel\
   bp_beep_rel\
   bp_init_rel\
   bp_read_rel\
   bp_stop_rel\
   bp_let_rel\
   bp_renum_rel\
   bp_list_rel\
   bp_data_rel\
   \
   bf_erfun_rel\
   bf_date_rel\
   bf_keyrw_rel\
   bf_most_rel
      


default: ${OBJECTS}
          ${LK} ${LINK_TARGET} link
clean:
          ${RM} ${OBJECTS} 
  
  

#
# Header file dependencies

#
# Rule for turning _asm into _rel files
#
_asm_rel:
    ${ASM} $C$*_asm ${ASMCMD}
and the LINK file

Code: Select all

!input win1_m_ss_lib
input   ss_base_rel
input   ss_ramt_rel
input   ss_init_rel
input   ss_list_rel
input   ss_ext_rel
input   ss_int2_rel
input   ss_job_rel
input   ss_iser_rel
input   ss_util_rel
input   ss_tlist_rel
input   ss_reshd_rel

   
!input win1_m_io_lib
input   io_chanx_rel
input   io_fdriv_rel
input   io_fopen_rel
input   io_name_rel
input   io_queue_rel
input   io_sched_rel
input   io_serio_rel
input   io_trap2_rel
input   io_trap3_rel
input   io_trap4_rel

!input win1_m_ip_lib
input   ip_int_rel
input   ip_kbrd_rel

!input win1_m_mt_lib
input   mt_trap_rel
input   mt_inf_rel
input   mt_cjob_rel
input   mt_jinf_rel
input   mt_free_rel
input   mt_trapv_rel
input   mt_susjb_rel
input   mt_alloc_rel
input   mt_dmode_rel
input   mt_ipcom_rel
input   mt_baud_rel
input   mt_rclck_rel
input   mt_lxint_rel
input   mt_cntry_rel

!input win1_m_bp_lib
input   bp_windw_rel
input   bp_turtl_rel
input   bp_misc_rel
input   bp_print_rel
input   bp_poke_rel
input   bp_grafx_rel
input   bp_files_rel
input   bp_chan_rel
input   bp_beep_rel
input   bp_init_rel
input   bp_read_rel
input   bp_stop_rel
input   bp_let_rel
input   bp_renum_rel
input   bp_list_rel
input   bp_data_rel

!input win1_m_mm_lib
input   mm_fssb_rel
input   mm_scafr_rel
input   mm_mvjob_rel
input   mm_lnkfr_rel
input   mm_alloc_rel
input   mm_retrn_rel
input   mm_rechp_rel
input   mm_altrn_rel
input   mm_alchp_rel
input   mm_move_rel

!input win1_m_cn_lib
input   cn_ston_rel
input   cn_itos_rel
input   cn_ftod_rel
input   cn_date_rel

!input win1_m_ut_lib
input   ut_cstr_rel
input   ut_err_rel
input   ut_link_rel
input   ut_messb_rel
input   ut_windw_rel

!input win1_m_bv_lib
input   bv_vtype_rel
input   bv_names_rel
input   bv_chstk_rel
input   bv_alvv_rel
input   bv_upnxt_rel

!input win1_m_md_lib
input   md_endgp_rel
input   md_formt_rel
input   md_sedes_rel
input   md_serve_rel
input   md_slave_rel
input   md_read_rel
input   md_write_rel

!input win1_m_nd_lib
input   nd_phys_rel

!input win1_m_ca_lib
input   ca_carg_rel
input   ca_cncat_rel
input   ca_cnvrt_rel
input   ca_opexe_rel
input   ca_eval_rel
input   ca_etos_rel
input   ca_fun_rel
input   ca_garg_rel
input   ca_gtarg_rel
input   ca_indx_rel
input   ca_stind_rel

!input win1_m_ri_lib
input   ri_swap_rel
input   ri_nabs_rel
input   ri_mldv_rel
input   ri_add_rel
input   ri_power_rel
input   ri_int_rel
input   ri_trig_rel
input   ri_sqrt_rel
input   ri_misc_rel
input   ri_exec_rel

!input win1_m_od_lib
input   od_ser_rel
input   od_pipe_rel
input   od_conx_rel
input   od_net_rel

!input win1_m_sd_lib
input   sd_wdef_rel
input   sd_setfo_rel
input   sd_setco_rel
input   sd_setat_rel
input   sd_pos_rel
input   sd_fresh_rel
input   sd_fill_rel
input   sd_entry_rel
input   sd_enq_rel
input   sd_curw_rel
input   sd_area_rel

!input win1_m_dd_lib
input   dd_mdv_rel
input   dd_mdvio_rel
input   dd_mdvop_rel
input   dd_mdvcl_rel
input   dd_mdvsc_rel
input   dd_mdvrn_rel
input   dd_mdvbu_rel

!input win1_m_pa_lib
input   pa_grtab_rel
input   pa_table_rel
input   pa_strip_rel
input   pa_mist_rel
input   pa_kywrd_rel
input   pa_graph_rel
input   pa_code_rel
input   pa_chnlt_rel
input   pa_chnam_rel

!input win1_m_pf_lib
input   pf_nwlin_rel
input   pf_relst_rel

!input win1_m_sb_lib
input   sb_unvr_rel
input   sb_start_rel

!input win1_m_bf_lib
input   bf_erfun_rel
input   bf_date_rel
input   bf_keyrw_rel
input   bf_most_rel

!input win1_m_ib_lib
input   ib_error_rel
input   ib_when_rel
input   ib_golin_rel
input   ib_call_rel
input   ib_npass_rel
input   ib_start_rel
input   ib_gost_rel
input   ib_end_rel
input   ib_let_rel
input   ib_array_rel
input   ib_symbl_rel
input   ib_sel_rel
input   ib_restr_rel
input   ib_name_rel
input   ib_wscan_rel
input   ib_next_rel
input   ib_proc_rel
input   ib_def_rel
input   ib_chinl_rel
input   ib_dim_rel
input   ib_exit_rel
input   ib_for_rel
input   ib_goto_rel
input   ib_if_rel
input   ib_kywrd_rel
input   ib_stop_rel

!input win1_m_gw_lib
input   gw_pixel_rel
input   gw_pixad_rel
input   gw_choct_rel
input   gw_pitt_rel
input   gw_trans_rel
input   gw_fig_rel
input   gw_flood_rel
input   gw_scale_rel
input   gw_gcur_rel

!input win1_m_cs_lib
input   cs_char_rel
input   cs_color_rel
input   cs_area_rel

!input win1_m_ii_lib
input   ii_clock_rel
input   ii_drive_rel

!input win1_m_tb_lib
input   tb_trn_rel
input   tb_otrn_rel
input   tb_multi_rel
input   tb_msg_rel
input   tb_kbenc_rel
input   tb_kbd_rel
input   tb_itrn_rel
input   tb_f1_rel
input   tb_f0_rel


ʎɐqǝ ɯoɹɟ ǝq oʇ ƃuᴉoƃ ʇou sᴉ pɹɐoqʎǝʞ ʇxǝu ʎɯ 'ɹɐǝp ɥO
quantumDavey
ROM Dongle
Posts: 7
Joined: Thu Mar 12, 2015 12:02 am
Location: Stockport, Cheshire, UK

Re: Minerva Assembly

Post by quantumDavey »

Thanks all - just what I needed.

Now all I have to do is work out what the macros in the source are doing - sooo I'll carry on reading the assembler manual.

Cheers,
Dave


The only stupid question is the one that isn't asked.
Post Reply