I don't think is so dificult, but i not know how he distinguis between levels.
Anyway the call in &58ce is very strange, is never used, depend from &57fd in memory.
edit:i know what he do 0=read from disk 1=save to disk

.
O.k resumely, left apart interrputs cheking and that thigs of the fdd this is how laser squad read the levels on disk:
You press a number (1-6) we apart 4 now, is load saved game, for the rest.
---------------------------------------------------------------------------------------------------
subrutine recieve number equivalent to the number pressed. (level 1 example)
Initial_cylinder=(number_pressed*6)+2=08
Finish_cylinder=initial_cylinder+5=0D
Then we park the head of the fdd in the initial_cylinder (08)
We read the id, and after cheking we have in the correct cylinder with Initial_cylinder
we have this predifined array
Read_sector_table=46,00,00,00,00,00,49,2a,ff :
command_read_sector,status,cylinder,head,sector_number,sector_size,track_lenght_,lenght_gap_3,data_lenght. [0-9]
now we have another array, the result of read id:
Id_table=statusregister0,statusregister1,statusregister2,cylinder,head,sector_number,sector_size. [0-6]
Now, we take:
Read_sector_table[3]=id_table[3]
Read_sector_table[4]=id_table[4]
Read_sector_table[5]=((id_table[5] and f0)+1)
Read_sector_table[6]=id_table[6]
Read_sector_table[7]=Read_sector_table[5]+07
Rest of parameter Read_sector_table default.
And we send read sector

we begining store it in &6367 after read sector we add +1000 this.
When initial_cylinder=Finish_cylinder we go out, if not. initial_cylinder=initial_cylinder+1 and we repeat procedure.
Now we need a program do these with sector routine from duke (save/load is another history to look).