Răsfoiți Sursa

Allow 16-bit cylinder number.

Keir Fraser 1 an în urmă
părinte
comite
34daf529c7
2 a modificat fișierele cu 9 adăugiri și 3 ștergeri
  1. 2 1
      inc/cdc_acm_protocol.h
  2. 7 2
      src/floppy.c

+ 2 - 1
inc/cdc_acm_protocol.h

@@ -26,7 +26,8 @@
  * Host follows after a successful ACK response with <update_len> bytes.
  * Main firmware finally returns a status byte, 0 on success. */
 #define CMD_UPDATE          1
-/* CMD_SEEK, length=3, cyl#. Seek to cyl# on selected drive. */
+/* CMD_SEEK, length=3-4, cyl#. Seek to cyl# on selected drive.
+ * cyl# is signed: length=3 => int8_t cyl#; length=4 => int16_t cyl# */
 #define CMD_SEEK            2
 /* CMD_HEAD, length=3, head# (0=bottom) */
 #define CMD_HEAD            3

+ 7 - 2
src/floppy.c

@@ -1479,9 +1479,14 @@ static void process_command(void)
         goto out;
     }
     case CMD_SEEK: {
-        int8_t cyl = u_buf[2];
-        if (len != 3)
+        int cyl;
+        if (len == 3) {
+            cyl = *(int8_t *)&u_buf[2];
+        } else if (len == 4) {
+            cyl = *(int16_t *)&u_buf[2];
+        } else {
             goto bad_command;
+        }
         u_buf[1] = floppy_seek(cyl);
         goto out;
     }