<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.cpcwiki.eu/index.php?action=history&amp;feed=atom&amp;title=Programming%3AA_simple_disc_formatter_using_BDOS_functions</id>
	<title>Programming:A simple disc formatter using BDOS functions - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.cpcwiki.eu/index.php?action=history&amp;feed=atom&amp;title=Programming%3AA_simple_disc_formatter_using_BDOS_functions"/>
	<link rel="alternate" type="text/html" href="https://www.cpcwiki.eu/index.php?title=Programming:A_simple_disc_formatter_using_BDOS_functions&amp;action=history"/>
	<updated>2026-08-30T20:55:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://www.cpcwiki.eu/index.php?title=Programming:A_simple_disc_formatter_using_BDOS_functions&amp;diff=108484&amp;oldid=prev</id>
		<title>Nworc at 23:33, 22 March 2022</title>
		<link rel="alternate" type="text/html" href="https://www.cpcwiki.eu/index.php?title=Programming:A_simple_disc_formatter_using_BDOS_functions&amp;diff=108484&amp;oldid=prev"/>
		<updated>2022-03-22T23:33:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:33, 22 March 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot;&gt;Line 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; - 40 track single sided disc drive ONLY&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; - 40 track single sided disc drive ONLY&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; - Vendor and Data formats ONLY&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; - Vendor and Data formats ONLY&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;; Comment Nworc, 23.02.2022: &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;;   This code is useful as a learning experience, but be careful not to use it in a productive environment, because&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;;   the formatting routine formats the sectors consecutively (e.g. C1 C2 C3 C4 ... for Data format). While this works,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;;   read and write performance is poor on a disk with such a format, as the disk needs to spin 9 times to write a full&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;;   track instead of just 2 turns if the format would be interleaved. The format_track method need be changed to produce&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;;   an interleaved format (e.g. C1 C6 C2 C7 ... for Data format) in order to fix this. Changing that is a nice exercise.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;org &amp;amp;2000&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;org &amp;amp;2000&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb:diff:1.41:old-15019:rev-108484:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Nworc</name></author>
	</entry>
	<entry>
		<id>https://www.cpcwiki.eu/index.php?title=Programming:A_simple_disc_formatter_using_BDOS_functions&amp;diff=15019&amp;oldid=prev</id>
		<title>CPCLER at 20:40, 13 March 2007</title>
		<link rel="alternate" type="text/html" href="https://www.cpcwiki.eu/index.php?title=Programming:A_simple_disc_formatter_using_BDOS_functions&amp;diff=15019&amp;oldid=prev"/>
		<updated>2007-03-13T20:40:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:40, 13 March 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l389&quot;&gt;Line 389:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 389:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;defs 9*4&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;defs 9*4&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Programming]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb:diff:1.41:old-14919:rev-15019:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>CPCLER</name></author>
	</entry>
	<entry>
		<id>https://www.cpcwiki.eu/index.php?title=Programming:A_simple_disc_formatter_using_BDOS_functions&amp;diff=14919&amp;oldid=prev</id>
		<title>CPCLER at 07:40, 13 March 2007</title>
		<link rel="alternate" type="text/html" href="https://www.cpcwiki.eu/index.php?title=Programming:A_simple_disc_formatter_using_BDOS_functions&amp;diff=14919&amp;oldid=prev"/>
		<updated>2007-03-13T07:40:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
;; A simple disc formatter which uses the BDOS functions.&lt;br /&gt;
;;&lt;br /&gt;
;; This example will work on CPC and CPC+.&lt;br /&gt;
;;&lt;br /&gt;
;; Format program supports:&lt;br /&gt;
;; - 40 track single sided disc drive ONLY&lt;br /&gt;
;; - Vendor and Data formats ONLY&lt;br /&gt;
&lt;br /&gt;
org &amp;amp;2000&lt;br /&gt;
nolist&lt;br /&gt;
write&amp;quot;format.bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;;------------------------------------------&lt;br /&gt;
;; operating system functions used&lt;br /&gt;
&lt;br /&gt;
.kl_find_command equ &amp;amp;bcd4&lt;br /&gt;
.txt_output equ &amp;amp;bb5a&lt;br /&gt;
.bdos_set_message equ 1&lt;br /&gt;
.bdos_format equ 6&lt;br /&gt;
.bdos_move_track equ 7&lt;br /&gt;
.bdos_set_retry_count equ 9&lt;br /&gt;
.bdos_get_status equ 8&lt;br /&gt;
.bdos_select_format equ 3&lt;br /&gt;
.km_read_char equ &amp;amp;bb09&lt;br /&gt;
.km_wait_char equ &amp;amp;bb06&lt;br /&gt;
&lt;br /&gt;
;;------------------------------------------&lt;br /&gt;
;; offsets into our data &lt;br /&gt;
&lt;br /&gt;
.DRIVE equ 0&lt;br /&gt;
.TRACK equ 1&lt;br /&gt;
.SECTOR_ID equ 2&lt;br /&gt;
&lt;br /&gt;
;;------------------------------------------&lt;br /&gt;
;; search roms to find commands required for format&lt;br /&gt;
&lt;br /&gt;
ld hl,disc_command&lt;br /&gt;
call kl_find_command&lt;br /&gt;
ret nc&lt;br /&gt;
&lt;br /&gt;
ld hl,format_command&lt;br /&gt;
call kl_find_command&lt;br /&gt;
ret nc&lt;br /&gt;
ld (format_cmd_data),hl&lt;br /&gt;
ld a,c&lt;br /&gt;
ld (format_cmd_data+2),a&lt;br /&gt;
&lt;br /&gt;
ld hl,select_format_command&lt;br /&gt;
call kl_find_command&lt;br /&gt;
ret nc&lt;br /&gt;
ld (select_format_cmd_data),hl&lt;br /&gt;
ld a,c&lt;br /&gt;
ld (select_format_cmd_data+2),a&lt;br /&gt;
&lt;br /&gt;
ld hl,move_track_command&lt;br /&gt;
call kl_find_command&lt;br /&gt;
ret nc&lt;br /&gt;
ld (move_track_cmd_data),hl&lt;br /&gt;
ld a,c&lt;br /&gt;
ld (move_track_cmd_data+2),a&lt;br /&gt;
&lt;br /&gt;
ld hl,set_retry_count_command&lt;br /&gt;
call kl_find_command&lt;br /&gt;
ret nc&lt;br /&gt;
ld (set_retry_count_cmd_data),hl&lt;br /&gt;
ld a,c&lt;br /&gt;
ld (set_retry_count_cmd_data+2),a&lt;br /&gt;
&lt;br /&gt;
ld hl,set_message_command&lt;br /&gt;
call kl_find_command&lt;br /&gt;
ret nc&lt;br /&gt;
ld (set_message_cmd_data),hl&lt;br /&gt;
ld a,c&lt;br /&gt;
ld (set_message_cmd_data+2),a&lt;br /&gt;
&lt;br /&gt;
;;------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ld ix,data&lt;br /&gt;
&lt;br /&gt;
;; display format question&lt;br /&gt;
ld hl,format_type_txt&lt;br /&gt;
call print&lt;br /&gt;
&lt;br /&gt;
.copy2&lt;br /&gt;
call flush_keyboard&lt;br /&gt;
call km_wait_char&lt;br /&gt;
and &amp;amp;df&lt;br /&gt;
cp &amp;quot;V&amp;quot;&lt;br /&gt;
ld c,&amp;amp;41&lt;br /&gt;
jr z,copy3&lt;br /&gt;
cp &amp;quot;D&amp;quot;&lt;br /&gt;
ld c,&amp;amp;c1&lt;br /&gt;
jr z,copy3&lt;br /&gt;
ld a,7&lt;br /&gt;
call txt_output&lt;br /&gt;
jp copy2&lt;br /&gt;
&lt;br /&gt;
.copy3&lt;br /&gt;
call txt_output&lt;br /&gt;
&lt;br /&gt;
ld (ix+SECTOR_ID),c&lt;br /&gt;
&lt;br /&gt;
call crlf&lt;br /&gt;
&lt;br /&gt;
;; display drive question&lt;br /&gt;
ld hl,sel_drive_txt&lt;br /&gt;
call print&lt;br /&gt;
ld hl,drive_txt&lt;br /&gt;
call print&lt;br /&gt;
&lt;br /&gt;
;; ask user to select drive&lt;br /&gt;
call get_drive&lt;br /&gt;
ld (ix+DRIVE),c&lt;br /&gt;
&lt;br /&gt;
ld hl,insert_disc_txt&lt;br /&gt;
call print&lt;br /&gt;
ld a,(ix+DRIVE)&lt;br /&gt;
add a,&amp;quot;A&amp;quot;&lt;br /&gt;
call txt_output&lt;br /&gt;
ld hl,any_key_txt&lt;br /&gt;
call print&lt;br /&gt;
&lt;br /&gt;
call flush_keyboard&lt;br /&gt;
call km_wait_char&lt;br /&gt;
&lt;br /&gt;
;; select the format (initialises some of the XDPB parameters that are required&lt;br /&gt;
;; by the format function)&lt;br /&gt;
ld a,(ix+SECTOR_ID)&lt;br /&gt;
call do_select_format&lt;br /&gt;
&lt;br /&gt;
;; do format&lt;br /&gt;
ld b,40&lt;br /&gt;
xor a&lt;br /&gt;
.format_disc&lt;br /&gt;
ld (ix+TRACK),a&lt;br /&gt;
push af&lt;br /&gt;
push bc&lt;br /&gt;
&lt;br /&gt;
ld hl,format_track_txt&lt;br /&gt;
call print&lt;br /&gt;
call disp_track&lt;br /&gt;
&lt;br /&gt;
call format_track&lt;br /&gt;
&lt;br /&gt;
pop bc&lt;br /&gt;
pop af&lt;br /&gt;
inc a&lt;br /&gt;
djnz format_disc&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
;;------------------------------------&lt;br /&gt;
;; remove all characters from keyboard input buffer&lt;br /&gt;
&lt;br /&gt;
.flush_keyboard&lt;br /&gt;
call km_read_char&lt;br /&gt;
jr nc,flush_keyboard&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
;;------------------------------------&lt;br /&gt;
;; Exit: C = drive index&lt;br /&gt;
&lt;br /&gt;
.get_drive&lt;br /&gt;
;; remove keys from keyboard buffer&lt;br /&gt;
call flush_keyboard&lt;br /&gt;
;; wait for next character from keyboard&lt;br /&gt;
call km_wait_char&lt;br /&gt;
;; convert to upper case&lt;br /&gt;
and &amp;amp;df&lt;br /&gt;
&lt;br /&gt;
cp &amp;quot;A&amp;quot;&lt;br /&gt;
ld c,0&lt;br /&gt;
jr z,gd2&lt;br /&gt;
cp &amp;quot;B&amp;quot;&lt;br /&gt;
ld c,1&lt;br /&gt;
jr z,gd2&lt;br /&gt;
&lt;br /&gt;
;; error (beep)&lt;br /&gt;
ld a,7&lt;br /&gt;
call txt_output&lt;br /&gt;
jr get_drive&lt;br /&gt;
&lt;br /&gt;
.gd2&lt;br /&gt;
call txt_output&lt;br /&gt;
call crlf&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
;;-------------------------&lt;br /&gt;
;; display CR,LF control codes (go to next line)&lt;br /&gt;
.crlf&lt;br /&gt;
ld a,13&lt;br /&gt;
call txt_output&lt;br /&gt;
ld a,10&lt;br /&gt;
call txt_output&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
;;-------------------------------------&lt;br /&gt;
;; display a message starting at memory address pointed to by HL. &lt;br /&gt;
;; (message is terminated with 0 character)&lt;br /&gt;
&lt;br /&gt;
.print&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
inc hl&lt;br /&gt;
or a&lt;br /&gt;
ret z&lt;br /&gt;
call txt_output&lt;br /&gt;
jr print&lt;br /&gt;
&lt;br /&gt;
;;----------------------------------------------&lt;br /&gt;
;; output the number of the current track to the screen&lt;br /&gt;
&lt;br /&gt;
.disp_track&lt;br /&gt;
ld a,(ix+TRACK)&lt;br /&gt;
call print_decimal&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
;;----------------------------------------------&lt;br /&gt;
;; display a decimal number to the screen &lt;br /&gt;
&lt;br /&gt;
.print_decimal&lt;br /&gt;
ld e,1&lt;br /&gt;
ld b,100&lt;br /&gt;
call print_decimal_digit&lt;br /&gt;
ld b,10&lt;br /&gt;
call print_decimal_digit&lt;br /&gt;
dec e&lt;br /&gt;
ld b,1&lt;br /&gt;
&lt;br /&gt;
.print_decimal_digit&lt;br /&gt;
ld c,0&lt;br /&gt;
.dd&lt;br /&gt;
sub b&lt;br /&gt;
jr c,dd2&lt;br /&gt;
inc c&lt;br /&gt;
jr dd&lt;br /&gt;
.dd2&lt;br /&gt;
add a,b&lt;br /&gt;
push af&lt;br /&gt;
ld a,e&lt;br /&gt;
or a&lt;br /&gt;
ld a,c&lt;br /&gt;
jr z,dd4&lt;br /&gt;
or a&lt;br /&gt;
jr z,dd5&lt;br /&gt;
dec e&lt;br /&gt;
&lt;br /&gt;
.dd4&lt;br /&gt;
add a,&amp;quot;0&amp;quot;&lt;br /&gt;
call txt_output&lt;br /&gt;
.dd5&lt;br /&gt;
pop af&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;;-------------------------------------&lt;br /&gt;
&lt;br /&gt;
.do_set_retry_count&lt;br /&gt;
push ix&lt;br /&gt;
rst 3&lt;br /&gt;
defw set_retry_count_cmd_data&lt;br /&gt;
pop ix&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
.do_move_track&lt;br /&gt;
push ix&lt;br /&gt;
rst 3&lt;br /&gt;
defw move_track_cmd_data&lt;br /&gt;
pop ix&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
.do_format&lt;br /&gt;
push ix&lt;br /&gt;
rst 3&lt;br /&gt;
defw format_cmd_data&lt;br /&gt;
pop ix&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
.do_select_format&lt;br /&gt;
push ix&lt;br /&gt;
rst 3&lt;br /&gt;
defw select_format_cmd_data&lt;br /&gt;
pop ix&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
.do_set_message&lt;br /&gt;
push ix&lt;br /&gt;
rst 3&lt;br /&gt;
defw set_message_cmd_data&lt;br /&gt;
pop ix&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
;;----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
.format_track&lt;br /&gt;
;; setup format data&lt;br /&gt;
ld hl,format_data&lt;br /&gt;
push hl&lt;br /&gt;
ld b,9&lt;br /&gt;
ld a,(ix+SECTOR_ID)&lt;br /&gt;
ld c,(ix+TRACK)&lt;br /&gt;
.wt1 &lt;br /&gt;
ld (hl),c&lt;br /&gt;
inc hl&lt;br /&gt;
ld (hl),0&lt;br /&gt;
inc hl&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc hl&lt;br /&gt;
ld (hl),2&lt;br /&gt;
inc hl&lt;br /&gt;
inc a&lt;br /&gt;
djnz wt1&lt;br /&gt;
pop hl&lt;br /&gt;
&lt;br /&gt;
ld e,(ix+DRIVE)&lt;br /&gt;
ld d,(ix+TRACK)&lt;br /&gt;
call do_move_track&lt;br /&gt;
&lt;br /&gt;
ld e,(ix+DRIVE)&lt;br /&gt;
ld d,(ix+TRACK)&lt;br /&gt;
call do_format&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
;;-------------------------------------&lt;br /&gt;
&lt;br /&gt;
.disc_command&lt;br /&gt;
defb &amp;quot;DIS&amp;quot;,&amp;quot;C&amp;quot;+&amp;amp;80&lt;br /&gt;
&lt;br /&gt;
.format_command&lt;br /&gt;
defb bdos_format+&amp;amp;80&lt;br /&gt;
&lt;br /&gt;
.select_format_command&lt;br /&gt;
defb bdos_select_format+&amp;amp;80&lt;br /&gt;
&lt;br /&gt;
.move_track_command&lt;br /&gt;
defb bdos_move_track+&amp;amp;80&lt;br /&gt;
&lt;br /&gt;
.set_retry_count_command&lt;br /&gt;
defb bdos_set_retry_count+&amp;amp;80&lt;br /&gt;
&lt;br /&gt;
.set_message_command&lt;br /&gt;
defb bdos_set_message+&amp;amp;80&lt;br /&gt;
&lt;br /&gt;
;;-------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.format_cmd_data&lt;br /&gt;
defw 0&lt;br /&gt;
defb 0&lt;br /&gt;
&lt;br /&gt;
.select_format_cmd_data&lt;br /&gt;
defw 0&lt;br /&gt;
defb 0&lt;br /&gt;
&lt;br /&gt;
.move_track_cmd_data&lt;br /&gt;
defw 0&lt;br /&gt;
defb 0&lt;br /&gt;
&lt;br /&gt;
.set_retry_count_cmd_data&lt;br /&gt;
defw 0&lt;br /&gt;
defb 0&lt;br /&gt;
&lt;br /&gt;
.set_message_cmd_data&lt;br /&gt;
defw 0&lt;br /&gt;
defb 0&lt;br /&gt;
&lt;br /&gt;
;;--------------------------------------&lt;br /&gt;
&lt;br /&gt;
.format_type_txt&lt;br /&gt;
defb &amp;quot;Vendor or Data (V or D):&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
.sel_drive_txt&lt;br /&gt;
defb &amp;quot;Drive &amp;quot;,0&lt;br /&gt;
.drive_txt&lt;br /&gt;
defb &amp;quot;(A or B):&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
.insert_disc_txt&lt;br /&gt;
defb &amp;quot;Insert disc into drive &amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
.any_key_txt&lt;br /&gt;
defb &amp;quot; and press any key&amp;quot;,13,10,0&lt;br /&gt;
&lt;br /&gt;
.format_track_txt&lt;br /&gt;
defb 13,&amp;quot;Format track &amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
.data&lt;br /&gt;
defs 16&lt;br /&gt;
&lt;br /&gt;
.format_data&lt;br /&gt;
defs 9*4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>CPCLER</name></author>
	</entry>
</feed>